From 5855143da8f568edca488a19b0cd2f4d740d277c Mon Sep 17 00:00:00 2001 From: Dominic Tarr Date: Thu, 8 May 2014 23:47:29 +0200 Subject: [PATCH] use divide when number is too large for bitwise operations --- encode.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/encode.js b/encode.js index 3320033..34a11a6 100644 --- a/encode.js +++ b/encode.js @@ -3,17 +3,22 @@ module.exports = encode var MSB = 0x80 , REST = 0x7F , MSBALL = ~REST + , INT = Math.pow(2, 31) function encode(num, out, offset) { out = out || [] offset = offset || 0 var oldOffset = offset - while(num & MSBALL) { - out[offset++] = (num & 0xFF) | MSB + while(num >= INT) { + out[offset++] = (num & 0xFF) | MSB + num /= 128 + } + while(num >= 0x80) { + out[offset++] = (num & 0xFF) | MSB num >>>= 7 } - out[offset] = num + out[offset] = num | 0 encode.bytesWritten = offset - oldOffset + 1