]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/encoding/bits.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / encoding / bits.js
diff --git a/static/dojo-release-1.1.1/dojox/encoding/bits.js b/static/dojo-release-1.1.1/dojox/encoding/bits.js
new file mode 100644 (file)
index 0000000..8beb167
--- /dev/null
@@ -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;
+       }
+});
+
+}