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