123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- /*******************************************************************************************
- * Object: Hashtable
- * Description: Implementation of hashtable
- * Author: Uzi Refaeli
- *******************************************************************************************/
- //======================================= Properties ========================================
- Hashtable.prototype.hash = null;
- Hashtable.prototype.keys = null;
- Hashtable.prototype.location = null;
- /**
- * Hashtable - Constructor
- * Create a new Hashtable object.
- */
- function Hashtable(){
- this.hash = new Array();
- this.keys = new Array();
- this.location = 0;
- }
- /**
- * put
- * Add new key
- * param: key - String, key name
- * param: value - Object, the object to insert
- */
- Hashtable.prototype.put = function (key, value){
- if (value == null)
- return;
- if (this.hash[key] == null)
- this.keys[this.keys.length] = key;
- this.hash[key] = value;
- }
- /**
- * get
- * Return an element
- * param: key - String, key name
- * Return: object - The requested object
- */
- Hashtable.prototype.get = function (key){
- return this.hash[key];
- }
- /**
- * remove
- * Remove an element
- * param: key - String, key name
- */
- Hashtable.prototype.remove = function (key){
- for (var i = 0; i < this.keys.length; i++){
- //did we found our key?
- if (key == this.keys[i]){
- //remove it from the hash
- this.hash[this.keys[i]] = null;
- //and throw away the key...
- this.keys.splice(i ,1);
- return;
- }
- }
- }
- /**
- * size
- * Return: Number of elements in the hashtable
- */
- Hashtable.prototype.size = function (){
- return this.keys.length;
- }
- /**
- * populateItems
- * Deprecated
- */
- Hashtable.prototype.populateItems = function (){}
- /**
- * next
- * Return: true if theres more items
- */
- Hashtable.prototype.next = function (){
- if (++this.location < this.keys.length)
- return true;
- else
- return false;
- }
- /**
- * moveFirst
- * Move to the first item.
- */
- Hashtable.prototype.moveFirst = function (){
- try {
- this.location = -1;
- } catch(e) {/*//do nothing here :-)*/}
- }
- /**
- * moveLast
- * Move to the last item.
- */
- Hashtable.prototype.moveLast = function (){
- try {
- this.location = this.keys.length - 1;
- } catch(e) {/*//do nothing here :-)*/}
- }
- /**
- * getKey
- * Return: The value of item in the hash
- */
- Hashtable.prototype.getKey = function (){
- try {
- return this.keys[this.location];
- } catch(e) {
- return null;
- }
- }
- /**
- * getValue
- * Return: The value of item in the hash
- */
- Hashtable.prototype.getValue = function (){
- try {
- return this.hash[this.keys[this.location]];
- } catch(e) {
- return null;
- }
- }
- /**
- * getKey
- * Return: The first key contains the given value, or null if not found
- */
- Hashtable.prototype.getKeyOfValue = function (value){
- for (var i = 0; i < this.keys.length; i++)
- if (this.hash[this.keys[i]] == value)
- return this.keys[i]
- return null;
- }
- /**
- * toString
- * Returns a string representation of this Hashtable object in the form of a set of entries,
- * enclosed in braces and separated by the ASCII characters ", " (comma and space).
- * Each entry is rendered as the key, an equals sign =, and the associated element,
- * where the toString method is used to convert the key and element to strings.
- * Return: a string representation of this hashtable.
- */
- Hashtable.prototype.toString = function (){
- try {
- var s = new Array(this.keys.length);
- s[s.length] = "{";
- for (var i = 0; i < this.keys.length; i++){
- s[s.length] = this.keys[i];
- s[s.length] = "=";
- var v = this.hash[this.keys[i]];
- if (v)
- s[s.length] = v.toString();
- else
- s[s.length] = "null";
- if (i != this.keys.length-1)
- s[s.length] = ", ";
- }
- } catch(e) {
- //do nothing here :-)
- }finally{
- s[s.length] = "}";
- }
- return s.join("");
- }
- /**
- * add
- * Concatanates hashtable to another hashtable.
- */
- Hashtable.prototype.add = function(ht){
- try {
- ht.moveFirst();
- while(ht.next()){
- var key = ht.getKey();
- //put the new value in both cases (exists or not).
- this.hash[key] = ht.getValue();
- //but if it is a new key also increase the key set
- if (this.get(key) != null){
- this.keys[this.keys.length] = key;
- }
- }
- } catch(e) {
- //do nothing here :-)
- } finally {
- return this;
- }
- };
|