| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // Public domain
- function Map(compareFunction) {
- this.keyArray = [];
- this.valArray = [];
- this.compareFunction = compareFunction;
- }
- Map.prototype.put = function(key, val) {
- var elementIndex = this.findKey(key);
- if (elementIndex === (-1)) {
- this.keyArray.push(key);
- this.valArray.push(val);
- } else {
- this.valArray[elementIndex] = val;
- }
- };
- Map.prototype.get = function(key, def) {
- var result = def;
- var elementIndex = this.findKey(key);
- if (elementIndex !== (-1)) {
- result = this.valArray[elementIndex];
- }
- return result;
- };
- Map.prototype.remove = function(key) {
- var result = null;
- var elementIndex = this.findKey(key);
- if (elementIndex !== (-1)) {
- this.keyArray = this.keyArray.removeAt(elementIndex);
- this.valArray = this.valArray.removeAt(elementIndex);
- }
- return;
- };
- Map.prototype.size = function() {
- return (this.keyArray.length);
- };
- Map.prototype.clear = function() {
- for ( var i = 0; i < this.keyArray.length; i++) {
- this.keyArray.pop();
- this.valArray.pop();
- }
- };
- Map.prototype.getKeys = function() {
- return (this.keyArray);
- };
- Map.prototype.getValues = function() {
- return (this.valArray);
- };
- Map.prototype.toString = function() {
- var result = "";
- for ( var i = 0; i < this.keyArray.length; i++) {
- result += "Key: " + this.keyArray[i] + "\tValue: " + this.valArray[i]
- + "\n";
- }
- return result;
- };
- Map.prototype.hasKey = function(key) {
- return this.findKey(key)!==-1;
- };
- Map.prototype.findKey = function(key) {
- var result = (-1);
- for ( var i = 0; i < this.keyArray.length; i++) {
- if (typeof(this.compareFunction)!=="undefined") {
- if (this.compareFunction(this.keyArray[i], key)) {
- result = i;
- break;
- }
- }
- else {
- if (this.keyArray[i] == key) {
- result = i;
- break;
- }
- }
- }
- return result;
- };
- Array.prototype.removeAt = function(index) {
- var part1 = this.slice(0, index);
- var part2 = this.slice(index + 1);
- return (part1.concat(part2));
- };
|