/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['collections/HashTable.js']) {
  _$jscoverage['collections/HashTable.js'] = [];
  _$jscoverage['collections/HashTable.js'][1] = 0;
  _$jscoverage['collections/HashTable.js'][6] = 0;
  _$jscoverage['collections/HashTable.js'][7] = 0;
  _$jscoverage['collections/HashTable.js'][8] = 0;
  _$jscoverage['collections/HashTable.js'][9] = 0;
  _$jscoverage['collections/HashTable.js'][10] = 0;
  _$jscoverage['collections/HashTable.js'][12] = 0;
  _$jscoverage['collections/HashTable.js'][16] = 0;
  _$jscoverage['collections/HashTable.js'][21] = 0;
  _$jscoverage['collections/HashTable.js'][25] = 0;
  _$jscoverage['collections/HashTable.js'][26] = 0;
  _$jscoverage['collections/HashTable.js'][30] = 0;
  _$jscoverage['collections/HashTable.js'][31] = 0;
  _$jscoverage['collections/HashTable.js'][32] = 0;
  _$jscoverage['collections/HashTable.js'][33] = 0;
  _$jscoverage['collections/HashTable.js'][34] = 0;
  _$jscoverage['collections/HashTable.js'][35] = 0;
  _$jscoverage['collections/HashTable.js'][38] = 0;
  _$jscoverage['collections/HashTable.js'][42] = 0;
  _$jscoverage['collections/HashTable.js'][43] = 0;
  _$jscoverage['collections/HashTable.js'][44] = 0;
  _$jscoverage['collections/HashTable.js'][45] = 0;
  _$jscoverage['collections/HashTable.js'][46] = 0;
  _$jscoverage['collections/HashTable.js'][47] = 0;
  _$jscoverage['collections/HashTable.js'][48] = 0;
  _$jscoverage['collections/HashTable.js'][49] = 0;
  _$jscoverage['collections/HashTable.js'][52] = 0;
  _$jscoverage['collections/HashTable.js'][53] = 0;
  _$jscoverage['collections/HashTable.js'][55] = 0;
  _$jscoverage['collections/HashTable.js'][59] = 0;
  _$jscoverage['collections/HashTable.js'][60] = 0;
  _$jscoverage['collections/HashTable.js'][61] = 0;
  _$jscoverage['collections/HashTable.js'][62] = 0;
  _$jscoverage['collections/HashTable.js'][63] = 0;
  _$jscoverage['collections/HashTable.js'][64] = 0;
  _$jscoverage['collections/HashTable.js'][65] = 0;
  _$jscoverage['collections/HashTable.js'][68] = 0;
  _$jscoverage['collections/HashTable.js'][72] = 0;
  _$jscoverage['collections/HashTable.js'][73] = 0;
  _$jscoverage['collections/HashTable.js'][74] = 0;
  _$jscoverage['collections/HashTable.js'][75] = 0;
  _$jscoverage['collections/HashTable.js'][76] = 0;
  _$jscoverage['collections/HashTable.js'][77] = 0;
  _$jscoverage['collections/HashTable.js'][84] = 0;
  _$jscoverage['collections/HashTable.js'][85] = 0;
  _$jscoverage['collections/HashTable.js'][86] = 0;
  _$jscoverage['collections/HashTable.js'][87] = 0;
  _$jscoverage['collections/HashTable.js'][88] = 0;
  _$jscoverage['collections/HashTable.js'][89] = 0;
  _$jscoverage['collections/HashTable.js'][93] = 0;
  _$jscoverage['collections/HashTable.js'][97] = 0;
  _$jscoverage['collections/HashTable.js'][98] = 0;
  _$jscoverage['collections/HashTable.js'][99] = 0;
  _$jscoverage['collections/HashTable.js'][100] = 0;
  _$jscoverage['collections/HashTable.js'][101] = 0;
  _$jscoverage['collections/HashTable.js'][102] = 0;
  _$jscoverage['collections/HashTable.js'][106] = 0;
  _$jscoverage['collections/HashTable.js'][127] = 0;
  _$jscoverage['collections/HashTable.js'][133] = 0;
  _$jscoverage['collections/HashTable.js'][137] = 0;
  _$jscoverage['collections/HashTable.js'][138] = 0;
  _$jscoverage['collections/HashTable.js'][139] = 0;
  _$jscoverage['collections/HashTable.js'][141] = 0;
  _$jscoverage['collections/HashTable.js'][155] = 0;
  _$jscoverage['collections/HashTable.js'][156] = 0;
  _$jscoverage['collections/HashTable.js'][157] = 0;
  _$jscoverage['collections/HashTable.js'][158] = 0;
  _$jscoverage['collections/HashTable.js'][160] = 0;
  _$jscoverage['collections/HashTable.js'][161] = 0;
  _$jscoverage['collections/HashTable.js'][172] = 0;
  _$jscoverage['collections/HashTable.js'][173] = 0;
  _$jscoverage['collections/HashTable.js'][174] = 0;
  _$jscoverage['collections/HashTable.js'][175] = 0;
  _$jscoverage['collections/HashTable.js'][177] = 0;
  _$jscoverage['collections/HashTable.js'][188] = 0;
  _$jscoverage['collections/HashTable.js'][189] = 0;
  _$jscoverage['collections/HashTable.js'][190] = 0;
  _$jscoverage['collections/HashTable.js'][191] = 0;
  _$jscoverage['collections/HashTable.js'][193] = 0;
  _$jscoverage['collections/HashTable.js'][205] = 0;
  _$jscoverage['collections/HashTable.js'][206] = 0;
  _$jscoverage['collections/HashTable.js'][207] = 0;
  _$jscoverage['collections/HashTable.js'][209] = 0;
  _$jscoverage['collections/HashTable.js'][211] = 0;
  _$jscoverage['collections/HashTable.js'][221] = 0;
  _$jscoverage['collections/HashTable.js'][222] = 0;
  _$jscoverage['collections/HashTable.js'][223] = 0;
  _$jscoverage['collections/HashTable.js'][224] = 0;
  _$jscoverage['collections/HashTable.js'][226] = 0;
  _$jscoverage['collections/HashTable.js'][238] = 0;
  _$jscoverage['collections/HashTable.js'][239] = 0;
  _$jscoverage['collections/HashTable.js'][240] = 0;
  _$jscoverage['collections/HashTable.js'][241] = 0;
  _$jscoverage['collections/HashTable.js'][242] = 0;
  _$jscoverage['collections/HashTable.js'][243] = 0;
  _$jscoverage['collections/HashTable.js'][245] = 0;
  _$jscoverage['collections/HashTable.js'][247] = 0;
  _$jscoverage['collections/HashTable.js'][260] = 0;
  _$jscoverage['collections/HashTable.js'][261] = 0;
  _$jscoverage['collections/HashTable.js'][262] = 0;
  _$jscoverage['collections/HashTable.js'][263] = 0;
  _$jscoverage['collections/HashTable.js'][264] = 0;
  _$jscoverage['collections/HashTable.js'][266] = 0;
  _$jscoverage['collections/HashTable.js'][276] = 0;
  _$jscoverage['collections/HashTable.js'][277] = 0;
  _$jscoverage['collections/HashTable.js'][289] = 0;
  _$jscoverage['collections/HashTable.js'][290] = 0;
  _$jscoverage['collections/HashTable.js'][301] = 0;
  _$jscoverage['collections/HashTable.js'][302] = 0;
  _$jscoverage['collections/HashTable.js'][314] = 0;
  _$jscoverage['collections/HashTable.js'][315] = 0;
  _$jscoverage['collections/HashTable.js'][325] = 0;
  _$jscoverage['collections/HashTable.js'][326] = 0;
  _$jscoverage['collections/HashTable.js'][336] = 0;
  _$jscoverage['collections/HashTable.js'][337] = 0;
  _$jscoverage['collections/HashTable.js'][344] = 0;
  _$jscoverage['collections/HashTable.js'][349] = 0;
  _$jscoverage['collections/HashTable.js'][350] = 0;
  _$jscoverage['collections/HashTable.js'][351] = 0;
  _$jscoverage['collections/HashTable.js'][353] = 0;
  _$jscoverage['collections/HashTable.js'][357] = 0;
  _$jscoverage['collections/HashTable.js'][358] = 0;
  _$jscoverage['collections/HashTable.js'][359] = 0;
  _$jscoverage['collections/HashTable.js'][361] = 0;
  _$jscoverage['collections/HashTable.js'][365] = 0;
  _$jscoverage['collections/HashTable.js'][369] = 0;
}
_$jscoverage['collections/HashTable.js'][1]++;
var define = require("../define").define, Collection = require("./Collection"), Iterable = require("./Iterable"), base = require("../base");
_$jscoverage['collections/HashTable.js'][6]++;
var hashFunction = (function (key) {
  _$jscoverage['collections/HashTable.js'][7]++;
  if (typeof key == "string") {
    _$jscoverage['collections/HashTable.js'][8]++;
    return key;
  }
  else {
    _$jscoverage['collections/HashTable.js'][9]++;
    if (typeof key == "object") {
      _$jscoverage['collections/HashTable.js'][10]++;
      return key.hashCode? key.hashCode(): "" + key;
    }
    else {
      _$jscoverage['collections/HashTable.js'][12]++;
      return "" + key;
    }
  }
});
_$jscoverage['collections/HashTable.js'][16]++;
var Bucket = define(null, {instance: {constructor: (function () {
  _$jscoverage['collections/HashTable.js'][21]++;
  this.__entries = [];
}), pushValue: (function (key, value) {
  _$jscoverage['collections/HashTable.js'][25]++;
  this.__entries.push({key: key, value: value});
  _$jscoverage['collections/HashTable.js'][26]++;
  return value;
}), remove: (function (key) {
  _$jscoverage['collections/HashTable.js'][30]++;
  var ret = null, map = this.__entries, val;
  _$jscoverage['collections/HashTable.js'][31]++;
  var i = map.length - 1;
  _$jscoverage['collections/HashTable.js'][32]++;
  for (; i >= 0; i--) {
    _$jscoverage['collections/HashTable.js'][33]++;
    if ((val = map[i]) != null && val.key == key) {
      _$jscoverage['collections/HashTable.js'][34]++;
      map[i] = null;
      _$jscoverage['collections/HashTable.js'][35]++;
      return val.value;
    }
}
  _$jscoverage['collections/HashTable.js'][38]++;
  return ret;
}), "set": (function (key, value) {
  _$jscoverage['collections/HashTable.js'][42]++;
  var ret = null, map = this.__entries;
  _$jscoverage['collections/HashTable.js'][43]++;
  var i = map.length - 1;
  _$jscoverage['collections/HashTable.js'][44]++;
  for (; i >= 0; i--) {
    _$jscoverage['collections/HashTable.js'][45]++;
    var val = map[i];
    _$jscoverage['collections/HashTable.js'][46]++;
    if (val && key === val.key) {
      _$jscoverage['collections/HashTable.js'][47]++;
      val.value = value;
      _$jscoverage['collections/HashTable.js'][48]++;
      ret = value;
      _$jscoverage['collections/HashTable.js'][49]++;
      break;
    }
}
  _$jscoverage['collections/HashTable.js'][52]++;
  if (! ret) {
    _$jscoverage['collections/HashTable.js'][53]++;
    map.push({key: key, value: value});
  }
  _$jscoverage['collections/HashTable.js'][55]++;
  return ret;
}), find: (function (key) {
  _$jscoverage['collections/HashTable.js'][59]++;
  var ret = null, map = this.__entries, val;
  _$jscoverage['collections/HashTable.js'][60]++;
  var i = map.length - 1;
  _$jscoverage['collections/HashTable.js'][61]++;
  for (; i >= 0; i--) {
    _$jscoverage['collections/HashTable.js'][62]++;
    val = map[i];
    _$jscoverage['collections/HashTable.js'][63]++;
    if (val && key === val.key) {
      _$jscoverage['collections/HashTable.js'][64]++;
      ret = val.value;
      _$jscoverage['collections/HashTable.js'][65]++;
      break;
    }
}
  _$jscoverage['collections/HashTable.js'][68]++;
  return ret;
}), getEntrySet: (function (arr) {
  _$jscoverage['collections/HashTable.js'][72]++;
  var map = this.__entries, l = map.length;
  _$jscoverage['collections/HashTable.js'][73]++;
  if (l) {
    _$jscoverage['collections/HashTable.js'][74]++;
    for (var i = 0; i < l; i++) {
      _$jscoverage['collections/HashTable.js'][75]++;
      var e = map[i];
      _$jscoverage['collections/HashTable.js'][76]++;
      if (e) {
        _$jscoverage['collections/HashTable.js'][77]++;
        arr.push(e);
      }
}
  }
}), getKeys: (function (arr) {
  _$jscoverage['collections/HashTable.js'][84]++;
  var map = this.__entries, l = map.length;
  _$jscoverage['collections/HashTable.js'][85]++;
  if (l) {
    _$jscoverage['collections/HashTable.js'][86]++;
    for (var i = 0; i < l; i++) {
      _$jscoverage['collections/HashTable.js'][87]++;
      var e = map[i];
      _$jscoverage['collections/HashTable.js'][88]++;
      if (e) {
        _$jscoverage['collections/HashTable.js'][89]++;
        arr.push(e.key);
      }
}
  }
  _$jscoverage['collections/HashTable.js'][93]++;
  return arr;
}), getValues: (function (arr) {
  _$jscoverage['collections/HashTable.js'][97]++;
  var map = this.__entries, l = map.length;
  _$jscoverage['collections/HashTable.js'][98]++;
  if (l) {
    _$jscoverage['collections/HashTable.js'][99]++;
    for (var i = 0; i < l; i++) {
      _$jscoverage['collections/HashTable.js'][100]++;
      var e = map[i];
      _$jscoverage['collections/HashTable.js'][101]++;
      if (e) {
        _$jscoverage['collections/HashTable.js'][102]++;
        arr.push(e.value);
      }
}
  }
  _$jscoverage['collections/HashTable.js'][106]++;
  return arr;
})}});
_$jscoverage['collections/HashTable.js'][127]++;
module.exports = exports = HashTable = define([Collection, Iterable], {instance: {constructor: (function () {
  _$jscoverage['collections/HashTable.js'][133]++;
  this.__map = {};
}), __entrySet: (function () {
  _$jscoverage['collections/HashTable.js'][137]++;
  var ret = [], es = [];
  _$jscoverage['collections/HashTable.js'][138]++;
  for (var i in this.__map) {
    _$jscoverage['collections/HashTable.js'][139]++;
    this.__map[i].getEntrySet(ret);
}
  _$jscoverage['collections/HashTable.js'][141]++;
  return ret;
}), put: (function (key, value) {
  _$jscoverage['collections/HashTable.js'][155]++;
  var hash = hashFunction(key);
  _$jscoverage['collections/HashTable.js'][156]++;
  var bucket = null;
  _$jscoverage['collections/HashTable.js'][157]++;
  if ((bucket = this.__map[hash]) == null) {
    _$jscoverage['collections/HashTable.js'][158]++;
    bucket = (this.__map[hash] = new Bucket());
  }
  _$jscoverage['collections/HashTable.js'][160]++;
  bucket.pushValue(key, value);
  _$jscoverage['collections/HashTable.js'][161]++;
  return value;
}), remove: (function (key) {
  _$jscoverage['collections/HashTable.js'][172]++;
  var hash = hashFunction(key), ret = null;
  _$jscoverage['collections/HashTable.js'][173]++;
  var bucket = this.__map[hash];
  _$jscoverage['collections/HashTable.js'][174]++;
  if (bucket) {
    _$jscoverage['collections/HashTable.js'][175]++;
    ret = bucket.remove(key);
  }
  _$jscoverage['collections/HashTable.js'][177]++;
  return ret;
}), "get": (function (key) {
  _$jscoverage['collections/HashTable.js'][188]++;
  var hash = hashFunction(key), ret = null;
  _$jscoverage['collections/HashTable.js'][189]++;
  var bucket = null;
  _$jscoverage['collections/HashTable.js'][190]++;
  if ((bucket = this.__map[hash]) != null) {
    _$jscoverage['collections/HashTable.js'][191]++;
    ret = bucket.find(key);
  }
  _$jscoverage['collections/HashTable.js'][193]++;
  return ret;
}), "set": (function (key, value) {
  _$jscoverage['collections/HashTable.js'][205]++;
  var hash = hashFunction(key), ret = null, bucket = null, map = this.__map;
  _$jscoverage['collections/HashTable.js'][206]++;
  if ((bucket = map[hash]) != null) {
    _$jscoverage['collections/HashTable.js'][207]++;
    ret = bucket.set(key, value);
  }
  else {
    _$jscoverage['collections/HashTable.js'][209]++;
    ret = (map[hash] = new Bucket()).pushValue(key, value);
  }
  _$jscoverage['collections/HashTable.js'][211]++;
  return ret;
}), contains: (function (key) {
  _$jscoverage['collections/HashTable.js'][221]++;
  var hash = hashFunction(key), ret = false;
  _$jscoverage['collections/HashTable.js'][222]++;
  var bucket = null;
  _$jscoverage['collections/HashTable.js'][223]++;
  if ((bucket = this.__map[hash]) != null) {
    _$jscoverage['collections/HashTable.js'][224]++;
    ret = bucket.find(key) != null;
  }
  _$jscoverage['collections/HashTable.js'][226]++;
  return ret;
}), concat: (function (hashTable) {
  _$jscoverage['collections/HashTable.js'][238]++;
  if (hashTable instanceof HashTable) {
    _$jscoverage['collections/HashTable.js'][239]++;
    var ret = new HashTable();
    _$jscoverage['collections/HashTable.js'][240]++;
    var otherEntrySet = hashTable.entrySet.concat(this.entrySet);
    _$jscoverage['collections/HashTable.js'][241]++;
    for (var i = otherEntrySet.length - 1; i >= 0; i--) {
      _$jscoverage['collections/HashTable.js'][242]++;
      var e = otherEntrySet[i];
      _$jscoverage['collections/HashTable.js'][243]++;
      ret.put(e.key, e.value);
}
    _$jscoverage['collections/HashTable.js'][245]++;
    return ret;
  }
  else {
    _$jscoverage['collections/HashTable.js'][247]++;
    throw new TypeError("When joining hashtables the joining arg must be a HashTable");
  }
}), filter: (function (cb, scope) {
  _$jscoverage['collections/HashTable.js'][260]++;
  var es = this.__entrySet(), ret = new HashTable();
  _$jscoverage['collections/HashTable.js'][261]++;
  es = es.filter.apply(es, arguments);
  _$jscoverage['collections/HashTable.js'][262]++;
  for (var i = es.length - 1; i >= 0; i--) {
    _$jscoverage['collections/HashTable.js'][263]++;
    var e = es[i];
    _$jscoverage['collections/HashTable.js'][264]++;
    ret.put(e.key, e.value);
}
  _$jscoverage['collections/HashTable.js'][266]++;
  return ret;
}), forEach: (function (cb, scope) {
  _$jscoverage['collections/HashTable.js'][276]++;
  var es = this.__entrySet(), l = es.length, f = cb.bind(scope || this);
  _$jscoverage['collections/HashTable.js'][277]++;
  es.forEach.apply(es, arguments);
}), every: (function () {
  _$jscoverage['collections/HashTable.js'][289]++;
  var es = this.__entrySet();
  _$jscoverage['collections/HashTable.js'][290]++;
  return es.every.apply(es, arguments);
}), map: (function () {
  _$jscoverage['collections/HashTable.js'][301]++;
  var es = this.__entrySet(), ret = new HashTable();
  _$jscoverage['collections/HashTable.js'][302]++;
  return es.map.apply(es, arguments);
}), some: (function () {
  _$jscoverage['collections/HashTable.js'][314]++;
  var es = this.__entrySet();
  _$jscoverage['collections/HashTable.js'][315]++;
  return es.some.apply(es, arguments);
}), reduce: (function () {
  _$jscoverage['collections/HashTable.js'][325]++;
  var es = this.__entrySet();
  _$jscoverage['collections/HashTable.js'][326]++;
  return es.reduce.apply(es, arguments);
}), reduceRight: (function () {
  _$jscoverage['collections/HashTable.js'][336]++;
  var es = this.__entrySet();
  _$jscoverage['collections/HashTable.js'][337]++;
  return es.reduceRight.apply(es, arguments);
}), clear: (function () {
  _$jscoverage['collections/HashTable.js'][344]++;
  this.__map = {};
}), getters: {keys: (function () {
  _$jscoverage['collections/HashTable.js'][349]++;
  var ret = [], es = [];
  _$jscoverage['collections/HashTable.js'][350]++;
  for (var i in this.__map) {
    _$jscoverage['collections/HashTable.js'][351]++;
    this.__map[i].getKeys(ret);
}
  _$jscoverage['collections/HashTable.js'][353]++;
  return ret;
}), values: (function () {
  _$jscoverage['collections/HashTable.js'][357]++;
  var ret = [], es = [];
  _$jscoverage['collections/HashTable.js'][358]++;
  for (var i in this.__map) {
    _$jscoverage['collections/HashTable.js'][359]++;
    this.__map[i].getValues(ret);
}
  _$jscoverage['collections/HashTable.js'][361]++;
  return ret;
}), entrySet: (function () {
  _$jscoverage['collections/HashTable.js'][365]++;
  return this.__entrySet();
}), isEmpty: (function () {
  _$jscoverage['collections/HashTable.js'][369]++;
  return this.keys.length == 0;
})}}});
_$jscoverage['collections/HashTable.js'].source = ["var define = require(\"../define\").define,","        Collection = require(\"./Collection\"),","        Iterable = require(\"./Iterable\"),","        base = require(\"../base\");","","var hashFunction = function (key) {","    if (typeof key == \"string\") {","        return key;","    } else if (typeof key == \"object\") {","        return  key.hashCode ? key.hashCode() : \"\" + key;","    } else {","        return \"\" + key;","    }","};","","var Bucket = define(null, {","","            instance : {","","                constructor : function() {","                    this.__entries = [];","                },","","                pushValue : function(key, value) {","                    this.__entries.push({key : key, value : value});","                    return value;","                },","","                remove : function(key) {","                    var ret = null, map = this.__entries, val;","                    var i = map.length - 1;","                    for (; i &gt;= 0; i--) {","                        if ((val = map[i]) != null &amp;&amp; val.key == key) {","                            map[i] = null;","                            return val.value;","                        }","                    }","                    return ret;","                },","","                \"set\" : function(key, value) {","                    var ret = null, map = this.__entries;","                    var i = map.length - 1;","                    for (; i &gt;= 0; i--) {","                        var val = map[i];","                        if (val &amp;&amp; key === val.key) {","                            val.value = value;","                            ret = value;","                            break;","                        }","                    }","                    if (!ret) {","                        map.push({key : key, value : value});","                    }","                    return ret;","                },","","                find : function(key) {","                    var ret = null, map = this.__entries, val;","                    var i = map.length - 1;","                    for (; i &gt;= 0; i--) {","                        val = map[i];","                        if (val &amp;&amp; key === val.key) {","                            ret = val.value;","                            break;","                        }","                    }","                    return ret;","                },","","                getEntrySet : function(arr) {","                    var map = this.__entries, l = map.length;","                    if (l) {","                        for (var i = 0; i &lt; l; i++) {","                            var e = map[i];","                            if (e) {","                                arr.push(e);","                            }","                        }","                    }","                },","","                getKeys : function(arr) {","                    var map = this.__entries, l = map.length;","                    if (l) {","                        for (var i = 0; i &lt; l; i++) {","                            var e = map[i];","                            if (e) {","                                arr.push(e.key);","                            }","                        }","                    }","                    return arr;","                },","","                getValues : function(arr) {","                    var map = this.__entries, l = map.length;","                    if (l) {","                        for (var i = 0; i &lt; l; i++) {","                            var e = map[i];","                            if (e) {","                                arr.push(e.value);","                            }","                        }","                    }","                    return arr;","                }","            }","        });","","/**"," *@class &lt;p&gt;Implementation of a HashTable for javascript."," *    This HashTable implementation allows one to use anything as a key."," *    &lt;/p&gt;"," * &lt;b&gt;NOTE: THIS IS ~ 3 times slower than javascript native objects&lt;/b&gt;"," *"," * &lt;p&gt; A use case for this collection is when one needs to store items in which the key will not be a string, or number&lt;/p&gt;"," *"," * @name HashTable"," * @augments comb.collections.Collection"," * @memberOf comb.collections"," *"," * @property {Array} keys all keys contained in the table"," * @property {Array} values all values contained in the table"," * @property {Array} entrySet an array of objects. Each object contains a key, and value property."," */","module.exports = exports = HashTable = define([Collection, Iterable], {","","            instance : {","                /**@lends comb.collections.HashTable.prototype*/","","                constructor : function() {","                    this.__map = {};","                },","","                __entrySet : function() {","                    var ret = [], es = [];","                    for (var i in this.__map) {","                        this.__map[i].getEntrySet(ret);","                    }","                    return ret;","                },","","                /**","                 * Put a key, value pair into the table","                 *","                 * &lt;b&gt;NOTE :&lt;/b&gt; the collection will not check if the key previously existed.","                 *","                 * @param {Anything} key the key to look up the object.","                 * @param {Anything} value the value that corresponds to the key.","                 *","                 * @returns the value","                 */","                put : function(key, value) {","                    var hash = hashFunction(key);","                    var bucket = null;","                    if ((bucket = this.__map[hash]) == null) {","                        bucket = (this.__map[hash] = new Bucket());","                    }","                    bucket.pushValue(key, value);","                    return value;","                },","","                /**","                 * Remove a key value pair from the table.","                 *","                 * @param key the key of the key value pair to remove.","                 *","                 * @returns the removed value.","                 */","                remove : function(key) {","                    var hash = hashFunction(key), ret = null;","                    var bucket = this.__map[hash];","                    if (bucket) {","                        ret = bucket.remove(key);","                    }","                    return ret;","                },","","                /**","                 * Get the value corresponding to the key.","                 *","                 * @param key the key used to look up the value","                 *","                 * @returns null if not found, or the value.","                 */","                \"get\" : function(key) {","                    var hash = hashFunction(key), ret = null;","                    var bucket = null;","                    if ((bucket = this.__map[hash]) != null) {","                        ret = bucket.find(key);","                    }","                    return ret;","                },","","                /**","                 * Set the value of a previously existing key,value pair or create a new entry.","                 *","                 * @param key the key to be be used","                 * @param value the value to be set","                 *","                 * @returns the value.","                 */","                \"set\" : function(key, value) {","                    var hash = hashFunction(key), ret = null, bucket = null, map = this.__map;","                    if ((bucket = map[hash]) != null) {","                        ret = bucket.set(key, value);","                    } else {","                        ret = (map[hash] = new Bucket()).pushValue(key, value);","                    }","                    return ret;","                },","","                /**","                 * Tests if the table contains a particular key","                 * @param key the key to test","                 *","                 * @returns {Boolean} true if it exitsts false otherwise.","                 */","                contains : function(key) {","                    var hash = hashFunction(key), ret = false;","                    var bucket = null;","                    if ((bucket = this.__map[hash]) != null) {","                        ret = bucket.find(key) != null;","                    }","                    return ret;","                },","","                /**","                 * Returns a new HashTable containing the values of this HashTable, and the other table.","                 * &lt;/br&gt;","                 * &lt;b&gt; DOES NOT CHANGE THE ORIGINAL!&lt;/b&gt;","                 * @param {comb.collections.HashTable} hashTable the hash table to concat with this.","                 *","                 * @returns {comb.collections.HashTable} a new HashTable containing all values from both tables.","                 */","                concat : function(hashTable) {","                    if (hashTable instanceof HashTable) {","                        var ret = new HashTable();","                        var otherEntrySet = hashTable.entrySet.concat(this.entrySet);","                        for (var i = otherEntrySet.length - 1; i &gt;= 0; i--) {","                            var e = otherEntrySet[i];","                            ret.put(e.key, e.value);","                        }","                        return ret;","                    } else {","                        throw new TypeError(\"When joining hashtables the joining arg must be a HashTable\");","                    }","                },","","                /**","                 * Creates a new HashTable containg values that passed the filtering function.","                 *","                 * @param {Function} cb Function to callback with each item, the first aruguments is an object containing a key and value field","                 * @param {Object} scope the scope to call the function.","                 *","                 * @returns {comb.collections.HashTable} the HashTable containing the values that passed the filter.","                 */","                filter : function(cb, scope) {","                    var es = this.__entrySet(), ret = new HashTable();","                    es = es.filter.apply(es, arguments);","                    for (var i = es.length - 1; i &gt;= 0; i--) {","                        var e = es[i];","                        ret.put(e.key, e.value);","                    }","                    return ret;","                },","","                /**","                 *  Loop through each value in the hashtable","                 *","                 *  @param {Function} cb the function to call with an object containing a key and value field","                 *  @param {Object} scope the scope to call the funciton in","                 */","                forEach : function(cb, scope) {","                    var es = this.__entrySet(), l = es.length, f = cb.bind(scope || this);","                    es.forEach.apply(es, arguments);","                },","","                /**","                 * Determines if every item meets the condition returned by the callback.","                 *","                 * @param {Function} cb Function to callback with each item, the first aruguments is an object containing a key and value field","                 * @param {Object} [scope=this] scope to call the function in","                 *","                 * @returns {Boolean} True if every item passed false otherwise","                 */","                every : function() {","                    var es = this.__entrySet();","                    return es.every.apply(es, arguments);","                },","","                /**","                 * Loop through each value in the hashtable, collecting the value returned by the callback function.","                 * @param {Function} cb Function to callback with each item, the first aruguments is an object containing a key and value field","                 * @param {Object} [scope=this] scope to call the function in","                 *","                 * @returns {Array} an array containing the mapped values.","                 */","                map : function() {","                    var es = this.__entrySet(), ret = new HashTable();","                    return es.map.apply(es, arguments);","                },","","                /**","                 * Determines if some items meet the condition returned by the callback.","                 *","                 * @param {Function} cb Function to callback with each item, the first aruguments is an object containing a key and value field","                 * @param {Object} [scope=this] scope to call the function in","                 *","                 * @returns {Boolean} True if some items passed false otherwise","                 */","                some : function() {","                    var es = this.__entrySet();","                    return es.some.apply(es, arguments);","                },","","                /**","                 * Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value.","                 *","                 * @param {Function} callback Function to execute on each value in the array.","                 * @param initialValue Value to use as the first argument to the first call of the callback..","                 */","                reduce : function() {","                    var es = this.__entrySet();","                    return es.reduce.apply(es, arguments);","                },","","                /**","                 * Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value.","                 *","                 * @param {Function} callback Function to execute on each value in the array.","                 * @param initialValue Value to use as the first argument to the first call of the callback..","                 */","                reduceRight : function() {","                    var es = this.__entrySet();","                    return es.reduceRight.apply(es, arguments);","                },","","                /**","                 * Clears out all items from the table.","                 */","                clear : function() {","                    this.__map = {};","                },","","                getters : {","                    keys : function() {","                        var ret = [], es = [];","                        for (var i in this.__map) {","                            this.__map[i].getKeys(ret);","                        }","                        return ret;","                    },","","                    values : function() {","                        var ret = [], es = [];","                        for (var i in this.__map) {","                            this.__map[i].getValues(ret);","                        }","                        return ret;","                    },","","                    entrySet : function() {","                        return this.__entrySet();","                    },","","                    isEmpty : function() {","                        return this.keys.length == 0;","                    }","                }","            }","","        });","","",""];
