New file |
0,0 → 1,68 |
if(!dojo._hasResource["dojox.encoding.bits"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.bits"] = true; |
dojo.provide("dojox.encoding.bits"); |
|
dojox.encoding.bits.OutputStream = function(){ |
this.reset(); |
}; |
|
dojo.extend(dojox.encoding.bits.OutputStream, { |
reset: function(){ |
this.buffer = []; |
this.accumulator = 0; |
this.available = 8; |
}, |
putBits: function(value, width){ |
while(width){ |
var w = Math.min(width, this.available); |
var v = (w <= width ? value >>> (width - w) : value) << (this.available - w); |
this.accumulator |= v & (255 >>> (8 - this.available)); |
this.available -= w; |
if(!this.available){ |
this.buffer.push(this.accumulator); |
this.accumulator = 0; |
this.available = 8; |
} |
width -= w; |
} |
}, |
getWidth: function(){ |
return this.buffer.length * 8 + (8 - this.available); |
}, |
getBuffer: function(){ |
var b = this.buffer; |
if(this.available < 8){ b.push(this.accumulator & (255 << this.available)); } |
this.reset(); |
return b; |
} |
}); |
|
dojox.encoding.bits.InputStream = function(buffer, width){ |
this.buffer = buffer; |
this.width = width; |
this.bbyte = this.bit = 0; |
}; |
|
dojo.extend(dojox.encoding.bits.InputStream, { |
getBits: function(width){ |
var r = 0; |
while(width){ |
var w = Math.min(width, 8 - this.bit); |
var v = this.buffer[this.bbyte] >>> (8 - this.bit - w); |
r <<= w; |
r |= v & ~(~0 << w); |
this.bit += w; |
if(this.bit == 8){ |
++this.bbyte; |
this.bit = 0; |
} |
width -= w; |
} |
return r; |
}, |
getWidth: function(){ |
return this.width - this.bbyte * 8 - this.bit; |
} |
}); |
|
} |