diff --git a/src/util.h b/src/util.h index 4ce5c64..12fd044 100644 --- a/src/util.h +++ b/src/util.h @@ -156,6 +156,9 @@ FORCEINLINE void writeVarint(T value, std::vector& out) writeVarint(value, [&out](uint8_t b) { out.emplace_back(b); }); } +template static FORCEINLINE bool out_of_range(uint64_t value) { return value > std::numeric_limits::max(); } +template<> FORCEINLINE bool out_of_range(uint64_t) { return false; } + template const uint8_t* readVarint(const uint8_t* data, const uint8_t* data_end, T& b) { @@ -177,7 +180,7 @@ const uint8_t* readVarint(const uint8_t* data, const uint8_t* data_end, T& b) k += 7; if ((cur_byte & 0x80) == 0) { - if (result > std::numeric_limits::max()) { + if (out_of_range(result)) { return nullptr; } b = static_cast(result);