12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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;
- }
- });
- }
|