add back sjcl.bitArray.extract - needed for bn

This commit is contained in:
Quinn Slack 2011-04-20 22:34:33 -07:00
parent 86fe235744
commit 0e7ab6a614

View File

@ -42,6 +42,27 @@ sjcl.bitArray = {
return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart); return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
}, },
/**
* Extract a number packed into a bit array.
* @param {bitArray} a The array to slice.
* @param {Number} bstart The offset to the start of the slice, in bits.
* @param {Number} length The length of the number to extract.
* @return {Number} The requested slice.
*/
extract: function(a, bstart, blength) {
// FIXME: this Math.floor is not necessary at all, but for some reason
// seems to suppress a bug in the Chromium JIT.
var x, sh = Math.floor((-bstart-blength) & 31);
if ((bstart + blength - 1 ^ bstart) & -32) {
// it crosses a boundary
x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
} else {
// within a single word
x = a[bstart/32|0] >>> sh;
}
return x & ((1<<blength) - 1);
},
/** /**
* Concatenate two bit arrays. * Concatenate two bit arrays.
* @param {bitArray} a1 The first array. * @param {bitArray} a1 The first array.