You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
522 B
30 lines
522 B
module.exports = read
|
|
|
|
var MSB = 0x80
|
|
, REST = 0x7F
|
|
|
|
function read(buf, offset) {
|
|
var res = 0
|
|
, offset = offset || 0
|
|
, shift = 0
|
|
, counter = offset
|
|
, b
|
|
, l = buf.length
|
|
|
|
do {
|
|
if (counter >= l || shift > 49) {
|
|
read.bytes = 0
|
|
throw new RangeError('Could not decode varint')
|
|
}
|
|
b = buf[counter++]
|
|
res += shift < 28
|
|
? (b & REST) << shift
|
|
: (b & REST) * Math.pow(2, shift)
|
|
shift += 7
|
|
} while (b >= MSB)
|
|
|
|
read.bytes = counter - offset
|
|
|
|
return res
|
|
}
|