PhoenixProtocolBuffer  1.0.1
Set of tools to decode offset from protocol buffer
Loading...
Searching...
No Matches
phoenix_varint.cpp
Go to the documentation of this file.
1/***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5****************************************/
6
7
8#include "phoenix_varint.h"
9
10
12
15size_t phoenix_varIntToValue(const std::vector<uint8_t> & vecBitSize){
16 size_t res(0lu), factor(1lu), nbByte(vecBitSize.size());
17 for(size_t i(0lu); i < nbByte; ++i){
18 size_t value(vecBitSize[i]);
19 res += value * factor;
20 factor *= 128lu;
21 }
22 return res;
23}
24
26
29size_t phoenix_readVarInt(char* & iter){
30 std::vector<uint8_t> vecBitSize;
31 bool isExtraByte(false);
32 do{
33 char packedSizeVal = *iter;
34 uint8_t val = packedSizeVal & 127;
35 vecBitSize.push_back(val); //Get the first 7 bytes
36 isExtraByte = packedSizeVal & 128; //Get only the strong bit
37 iter += 1lu;
38 }while(isExtraByte);
39 return phoenix_varIntToValue(vecBitSize);
40}
41
43
45void phoenix_skipVarInt(char* & iter){
46 bool isExtraByte(false);
47 do{
48 char packedSizeVal = *iter;
49 isExtraByte = packedSizeVal & 128; //Get only the strong bit
50 iter += 1lu;
51 }while(isExtraByte);
52}
53
54
size_t phoenix_varIntToValue(const std::vector< uint8_t > &vecBitSize)
Convert a varint into a value.
size_t phoenix_readVarInt(char *&iter)
Reads and print a varint from protocol buffer.
void phoenix_skipVarInt(char *&iter)
Skips a varint.