|
|
|
@ -903,8 +903,6 @@ class LIBPROTOBUF_EXPORT CodedOutputStream { |
|
|
|
|
void WriteVarint32SlowPath(uint32 value); |
|
|
|
|
void WriteVarint64SlowPath(uint64 value); |
|
|
|
|
|
|
|
|
|
static size_t VarintSize32Fallback(uint32 value); |
|
|
|
|
|
|
|
|
|
// See above. Other projects may use "friend" to allow them to call this.
|
|
|
|
|
// Requires: no protocol buffer serialization in progress.
|
|
|
|
|
friend void ::google::protobuf::internal::MapTestForceDeterministic(); |
|
|
|
@ -1292,11 +1290,23 @@ inline uint8* CodedOutputStream::WriteTagToArray( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline size_t CodedOutputStream::VarintSize32(uint32 value) { |
|
|
|
|
if (value < (1 << 7)) { |
|
|
|
|
return 1; |
|
|
|
|
} else { |
|
|
|
|
return VarintSize32Fallback(value); |
|
|
|
|
} |
|
|
|
|
// This computes value == 0 ? 1 : floor(log2(value)) / 7 + 1
|
|
|
|
|
// Use an explicit multiplication to implement the divide of
|
|
|
|
|
// a number in the 1..31 range.
|
|
|
|
|
// Explicit OR 0x1 to avoid calling Bits::Log2FloorNonZero(0), which is
|
|
|
|
|
// undefined.
|
|
|
|
|
uint32 log2value = Bits::Log2FloorNonZero(value | 0x1); |
|
|
|
|
return static_cast<size_t>((log2value * 9 + 73) / 64); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline size_t CodedOutputStream::VarintSize64(uint64 value) { |
|
|
|
|
// This computes value == 0 ? 1 : floor(log2(value)) / 7 + 1
|
|
|
|
|
// Use an explicit multiplication to implement the divide of
|
|
|
|
|
// a number in the 1..63 range.
|
|
|
|
|
// Explicit OR 0x1 to avoid calling Bits::Log2FloorNonZero(0), which is
|
|
|
|
|
// undefined.
|
|
|
|
|
uint32 log2value = Bits::Log2FloorNonZero64(value | 0x1); |
|
|
|
|
return static_cast<size_t>((log2value * 9 + 73) / 64); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline size_t CodedOutputStream::VarintSize32SignExtended(int32 value) { |
|
|
|
|