thirdparty/jsdoctoolkit/app/frame/Hash.js
changeset 3041 c8f47f0b6697
equal deleted inserted replaced
3040:8f9580309846 3041:c8f47f0b6697
       
     1 /**
       
     2 	@constructor
       
     3 	@example
       
     4 	var _index = new Hash();
       
     5 	_index.set("a", "apple");
       
     6 	_index.set("b", "blue");
       
     7 	_index.set("c", "coffee");
       
     8 
       
     9 	for (var p = _index.first(); p; p = _index.next()) {
       
    10 		print(p.key+" is for "+p.value);
       
    11 	}
       
    12 	
       
    13  */
       
    14 var Hash = function() {
       
    15 	this._map = {};
       
    16 	this._keys = [];
       
    17 	this._vals = [];
       
    18 	this.reset();
       
    19 }
       
    20 
       
    21 Hash.prototype.set = function(k, v) {
       
    22 	if (k != "") {
       
    23 		this._keys.push(k);
       
    24 		this._map["="+k] = this._vals.length;
       
    25 		this._vals.push(v);
       
    26 	}
       
    27 }
       
    28 
       
    29 Hash.prototype.replace = function(k, k2, v) {
       
    30 	if (k == k2) return;
       
    31 
       
    32 	var offset = this._map["="+k];
       
    33 	this._keys[offset] = k2;
       
    34 	if (typeof v != "undefined") this._vals[offset] = v;
       
    35 	this._map["="+k2] = offset;
       
    36 	delete(this._map["="+k]);
       
    37 }
       
    38 
       
    39 Hash.prototype.drop = function(k) {
       
    40 	if (k != "") {
       
    41 		var offset = this._map["="+k];
       
    42 		this._keys.splice(offset, 1);
       
    43 		this._vals.splice(offset, 1);
       
    44 		delete(this._map["="+k]);
       
    45 		for (var p in this._map) {
       
    46 			if (this._map[p] >= offset) this._map[p]--;
       
    47 		}
       
    48 		if (this._cursor >= offset && this._cursor > 0) this._cursor--;
       
    49 	}
       
    50 }
       
    51 
       
    52 Hash.prototype.get = function(k) {
       
    53 	if (k != "") {
       
    54 		return this._vals[this._map["="+k]];
       
    55 	}
       
    56 }
       
    57 
       
    58 Hash.prototype.keys = function() {
       
    59 	return this._keys;
       
    60 }
       
    61 
       
    62 Hash.prototype.hasKey = function(k) {
       
    63 	if (k != "") {
       
    64 		return (typeof this._map["="+k] != "undefined");
       
    65 	}
       
    66 }
       
    67 
       
    68 Hash.prototype.values = function() {
       
    69 	return this._vals;
       
    70 }
       
    71 
       
    72 Hash.prototype.reset = function() {
       
    73 	this._cursor = 0;
       
    74 }
       
    75 
       
    76 Hash.prototype.first = function() {
       
    77 	this.reset();
       
    78 	return this.next();
       
    79 }
       
    80 
       
    81 Hash.prototype.next = function() {
       
    82 	if (this._cursor++ < this._keys.length)
       
    83 		return {key: this._keys[this._cursor-1], value: this._vals[this._cursor-1]};
       
    84 }