Merge pull request #213 from google/spec_add_leb128

Replace DecodeVarInt function with LEB128
This commit is contained in:
FrankGalligan 2017-10-03 10:00:47 -07:00 committed by GitHub
commit 6788c25aaa
2 changed files with 12 additions and 9 deletions

View File

@ -47,7 +47,7 @@ section is the header. The second section contains the metadata. This section is
* When bit reading is finished it will always pad the read to the current
byte.
* varUI32 and varUI64 types must be decoded by the DecodeVarint() function.
* varUI32 and varUI64 types must be decoded by the LEB128() function.
### General Conventions

View File

@ -1,17 +1,20 @@
## Core Functions
### DecodeVarint
### LEB128
~~~~~
void DecodeVarint(out_val) {
in UI8
if (in & (1 << 7)) {
DecodeVarint(out_val);
out_val = (out_val << 7) | (in & ((1 << 7) - 1));
} else {
out_val = in;
uint64_t LEB128() {
result = 0;
shift = 0;
while(true) {
in UI8
result |= (low order 7 bits of in) << shift;
if (high order bit of in == 0)
break;
shift += 7;
}
return result;
}
~~~~~
{:.draco-syntax }