Skip to content

Commit

Permalink
Merge pull request #8 from dcousens/opti
Browse files Browse the repository at this point in the history
Array operations optimization
  • Loading branch information
jprichardson committed Jul 24, 2014
2 parents 7d29b77 + fd805f7 commit 2286e2a
Showing 1 changed file with 18 additions and 15 deletions.
33 changes: 18 additions & 15 deletions lib/bs58.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,59 +20,62 @@ function encode(buffer) {
var i, j, digits = [0]
for (i = 0; i < buffer.length; i++) {
for (j = 0; j < digits.length; j++) digits[j] <<= 8
digits[digits.length - 1] += buffer[i]

digits[0] += buffer[i]

var carry = 0
for (j = digits.length - 1; j >= 0; j--){
for (j = 0; j < digits.length; ++j) {
digits[j] += carry

carry = (digits[j] / BASE) | 0
digits[j] %= BASE
}

while (carry) {
digits.unshift(carry)
carry = (digits[0] / BASE) | 0
digits[0] %= BASE
digits.push(carry % BASE)

carry = (carry / BASE) | 0
}
}

// deal with leading zeros
for (i = 0; i < buffer.length - 1 && buffer[i] == 0; i++) digits.unshift(0)
for (i = 0; i < buffer.length - 1 && buffer[i] == 0; i++) digits.push(0)

return digits.map(function(digit) { return ALPHABET[digit] }).join('')
return digits.reverse().map(function(digit) { return ALPHABET[digit] }).join('')
}

function decode(string) {
if (string.length === 0) return new Buffer(0)

var input = string.split('').map(function(c){
assert.notEqual(ALPHABET_MAP[c], undefined, 'Non-base58 character')
assert(c in ALPHABET_MAP, 'Non-base58 character')
return ALPHABET_MAP[c]
})

var i, j, bytes = [0]
for (i = 0; i < input.length; i++) {
for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
bytes[bytes.length - 1] += input[i]
bytes[0] += input[i]

var carry = 0
for (j = bytes.length - 1; j >= 0; j--){
for (j = 0; j < bytes.length; ++j) {
bytes[j] += carry

carry = bytes[j] >> 8
bytes[j] &= 0xff
}

while (carry) {
bytes.unshift(carry)
carry = bytes[0] >> 8
bytes[0] &= 0xff
bytes.push(carry & 0xff)

carry >>= 8
}
}

// deal with leading zeros
for (i = 0; i < input.length - 1 && input[i] == 0; i++) bytes.unshift(0)
for (i = 0; i < input.length - 1 && input[i] == 0; i++) bytes.push(0)

return new Buffer(bytes)
return new Buffer(bytes.reverse())
}

module.exports = {
Expand Down

0 comments on commit 2286e2a

Please sign in to comment.