Sha256: f77fc990e3f423ac57b40817020c50806941ed1c82a03f2a2bebbf92c4a3c02f

Contents?: true

Size: 1.4 KB

Versions: 11

Compression:

Stored size: 1.4 KB

Contents

dojo.provide("dojox.encoding.compression.splay");
dojo.require("dojox.encoding.bits");

dojox.encoding.compression.Splay = function(n){
	this.up = new Array(2 * n + 1);
	this.left = new Array(n);
	this.right = new Array(n);
	this.reset();
};

dojo.extend(dojox.encoding.compression.Splay, {
	reset: function(){
		for(var i = 1; i < this.up.length; this.up[i] = Math.floor((i - 1) / 2), ++i);
		for(var i = 0; i < this.left.length; this.left[i] = 2 * i + 1, this.right[i] = 2 * i + 2, ++i);
	},
	splay: function(i){
		var a = i + this.left.length;
		do{
			var c = this.up[a];
			if(c){	// root
				// rotated pair
				var d = this.up[c];
				// swap descendants
				var b = this.left[d];
				if(c == b){
					b = this.right[d];
					this.right[d] = a;
				} else {
					this.left[d] = a;
				}
				this[a == this.left[c] ? "left" : "right"][c] = b;
				this.up[a] = d;
				this.up[b] = c;
				a = d;
			}else{
				a = c;
			}
		}while(a);	// root
	},
	encode: function(value, stream){
		var s = [], a = value + this.left.length;
		do{
			s.push(this.right[this.up[a]] == a);
			a = this.up[a];
		}while(a);	// root
		this.splay(value);
		var l = s.length;
		while(s.length){ stream.putBits(s.pop() ? 1 : 0, 1); }
		return	l;
	},
	decode: function(stream){
		var a = 0;	// root;
		do{
			a = this[stream.getBits(1) ? "right" : "left"][a];
		}while(a < this.left.length);
		a -= this.left.length;
		this.splay(a);
		return	a;
	}
});

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
dojo_src-1.5.0 dojo/dojox/encoding/compression/splay.js
dojo_src-1.4.3 dojo/dojox/encoding/compression/splay.js
dojo_src-1.4.102 dojo/dojox/encoding/compression/splay.js
dojo-pkg-1.132.0 data/dojo-release-1.3.2-src/dojox/encoding/compression/splay.js
dojo-pkg-1.111.0 data/dojo-release-1.1.1-src/dojox/encoding/compression/splay.js
dojo-pkg-1.120.0 data/dojo-release-1.2.0-src/dojox/encoding/compression/splay.js
dojo-pkg-1.121.0 data/dojo-release-1.2.1-src/dojox/encoding/compression/splay.js
dojo-pkg-1.122.0 data/dojo-release-1.2.2-src/dojox/encoding/compression/splay.js
dojo-pkg-1.123.0 data/dojo-release-1.2.3-src/dojox/encoding/compression/splay.js
dojo-pkg-1.130.0 data/dojo-release-1.3.0-src/dojox/encoding/compression/splay.js
dojo-pkg-1.131.0 data/dojo-release-1.3.1-src/dojox/encoding/compression/splay.js