use divide when number is too large for bitwise operations

master
Dominic Tarr 10 years ago
parent e55b25d840
commit 5855143da8

@ -3,17 +3,22 @@ module.exports = encode
var MSB = 0x80 var MSB = 0x80
, REST = 0x7F , REST = 0x7F
, MSBALL = ~REST , MSBALL = ~REST
, INT = Math.pow(2, 31)
function encode(num, out, offset) { function encode(num, out, offset) {
out = out || [] out = out || []
offset = offset || 0 offset = offset || 0
var oldOffset = offset var oldOffset = offset
while(num & MSBALL) { while(num >= INT) {
out[offset++] = (num & 0xFF) | MSB
num /= 128
}
while(num >= 0x80) {
out[offset++] = (num & 0xFF) | MSB out[offset++] = (num & 0xFF) | MSB
num >>>= 7 num >>>= 7
} }
out[offset] = num out[offset] = num | 0
encode.bytesWritten = offset - oldOffset + 1 encode.bytesWritten = offset - oldOffset + 1

Loading…
Cancel
Save