From c96ea55ff1c7fadc57cf8a3d9f85ddaa5c8fe33a Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Thu, 10 Jan 2013 19:02:29 -0500 Subject: [PATCH] Added WriteVarInt32 and ByteSizeVarInt32 to tier1 bf_write. --HG-- branch : protobuf --- public/tier1/bitbuf.h | 3 +++ tier1/bitbuf.cpp | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/public/tier1/bitbuf.h b/public/tier1/bitbuf.h index ad8c9dad..4cd861da 100644 --- a/public/tier1/bitbuf.h +++ b/public/tier1/bitbuf.h @@ -143,6 +143,9 @@ public: // writes an unsigned integer with variable bit length void WriteUBitVar( unsigned int data ); + void WriteVarInt32( uint32 data ); + int ByteSizeVarInt32( uint32 data ); + // Copy the bits straight out of pIn. This seeks pIn forward by nBits. // Returns an error if this buffer or the read buffer overflows. bool WriteBitsFromBuffer( class bf_read *pIn, int nBits ); diff --git a/tier1/bitbuf.cpp b/tier1/bitbuf.cpp index 5279692d..f59956f1 100644 --- a/tier1/bitbuf.cpp +++ b/tier1/bitbuf.cpp @@ -236,6 +236,27 @@ void bf_write::WriteSBitLong( int data, int numbits ) } } +void bf_write::WriteVarInt32( uint32 data ) +{ + while ( data > 0x7F ) + { + WriteUBitLong( (data & 0x7F) | 0x80, 8 ); + data >>= 7; + } + WriteUBitLong( data & 0x7F, 8 ); +} + +int bf_write::ByteSizeVarInt32( uint32 data ) +{ + int size = 1; + while ( data > 0x7F ) + { + size++; + data >>= 7; + } + return size; +} + #if _WIN32 inline unsigned int BitCountNeededToEncode(unsigned int data) {