Index: lams_common/src/flash/org/lamsfoundation/lams/common/util/Hashtable.as =================================================================== diff -u --- lams_common/src/flash/org/lamsfoundation/lams/common/util/Hashtable.as (revision 0) +++ lams_common/src/flash/org/lamsfoundation/lams/common/util/Hashtable.as (revision 8656ac3c7c375dcf0358ecec1dc3c55761e2fcc9) @@ -0,0 +1,164 @@ +import org.lamsfoundation.lams.common.util.* + +/** +* HashTable +*/ +class Hashtable { + + //Declarations + private var elements:Array; + private var _name:String; + private var _watch:Boolean; + private var _watchFunction:Function; + private var _watchFunctionLocation:Object; + + + + //Constructor + function Hashtable(n) { + _name=n; + } + + public function put(key, val) { + Debugger.debug('called','Hashtable.prototype.put'); + var i = this._getIndex(key); + var r = this.elements[i].val; + + Debugger.debug('watch update..','Hashtable.prototype.put'); + if(this._watch){ + this._watchFunctionLocation[this._watchFunction](this._name, r, val); + } + + if(i == this.elements.length){ + this.elements.length++; + } + + //this.elements.length += i == this.elements.length; + + this.elements[i] = new HashtableElement(key, val); + return r; + } + + public function putAll(anArray) { + for (var i = 0; i < anArray.length; i++) { + this.put(i, anArray[i]); + if(this._watch){ + this._watchFunctionLocation[this._watchFunction](this._name, null, null); + } + } + } + + + public function get (o) { + //trace('Hashtable.prototype.get called'); + var i = this._getIndex(o); + trace('i:'+i); + if (i != this.elements.length) { + return this.elements[i].val; + } + } + + public function keys() { + var r = new Array(); + for (var i = 0; i < this.elements.length; i++) { + r[i] = this.elements[i].key; + } + return r; + } + + public function values() { + var r = new Array(); + for (var i = 0; i < this.elements.length; i++) { + r[i] = this.elements[i].val; + } + return r; + } + + public function remove(o) { + trace("removing " + o); + var i = this._getIndex(o); + + if(i < this.keys().length){ + // o found + var r = this.elements[i].val; + + if(this._watch){ + this._watchFunctionLocation[this._watchFunction](this._name, r, null); + } + + this.elements.splice(i, 1); + trace("length after removal: "+ this.elements.length); + return r; + }else{ + return null; + } + } + + public function clear() { + this.elements = new Array(); + if(this._watch){ + this._watchFunctionLocation[this._watchFunction](this._name, null, null); + } + + } + + public function clone(newName) { + var r = new Hashtable(newName); + for (var i = 0; i < this.elements.length; i++) { + r.elements[i] = this.elements[i]; + } + return r; + } + + public function containsKey(o) { + return this._getIndex(o) != this.elements.length; + } + + public function containsValue(o) { + return this._getIndex(o, "val") != this.elements.length; + } + + public function size() { + return this.elements.length; + } + + public function isEmpty() { + return this.elements.length == 0; + } + /* + public function toString = function() { + var r = ""; + for (var i = 0; i < this.elements.length; i++) { + r += ", " + this.elements[i]; + } + return r.substring(2 * (r.length > 0)); + } + */ + + public function startWatch(newWatchFunction,loc) { + this._watch = true; + this._watchFunction = newWatchFunction; + this._watchFunctionLocation = loc; + Debugger.debug("\nwatch "+this._watch+" for:"+this._name); + trace("\nwatch "+this._watch+" for:"+this._name); + } + + public function stopWatch () { + this._watch =false; + this._watchFunction = null; + this._watchFunctionLocation = null; + } + + /* + * + * Internal method to get index of an element + * o = search term, f is name of field, can be 'val' or blank is key + */ + private function _getIndex (o, f) { + //trace('Hashtable.prototype._getIndex'); + var r; + f = f == undefined ? "key" : f; + for (r = 0; r < this.elements.length && this.elements[r][f] != o; r++); + return r; + } +} \ No newline at end of file Index: lams_common/src/flash/org/lamsfoundation/lams/common/util/HashtableElement.as =================================================================== diff -u --- lams_common/src/flash/org/lamsfoundation/lams/common/util/HashtableElement.as (revision 0) +++ lams_common/src/flash/org/lamsfoundation/lams/common/util/HashtableElement.as (revision 8656ac3c7c375dcf0358ecec1dc3c55761e2fcc9) @@ -0,0 +1,26 @@ +import org.lamsfoundation.lams.common.util.* + +/** +* HashtableElement +*/ +class HashtableElement { + //Declarations + private var key; + private var val; + + //Constructor + function HashtableElement(key, val) { + //trace('Object.prototype.HashtableElement called'); + this.key = key; + this.val = val; + } + + public function toString() { + return "{" + this.key + "=" + this.val + "}"; + } + //Getters+Setters +} + + + +