Files
dss.web/server/components/dualKeyDict.js
Fergal Moran d2c529bafe Screw you git!
2015-12-01 19:50:20 +00:00

64 lines
1.6 KiB
JavaScript

/**
* Created by fergalm on 16/08/15.
*/
module.exports = DualKeyDict;
var Map = require("collections/map");
//this is the usual key val map
var __items = Map();
//this is a secondary map that maps secondary keys to primary keys
var __keyMap = Map();
function DualKeyDict() {
}
DualKeyDict.prototype.forEach = function (key, callback) {
__items.forEach(function (result) {
callback(result);
})
};
DualKeyDict.prototype.has = function (key) {
if (key.length != 2)
throw new Error("key must be array of length 2.");
if (key[0] != null)
return __items.has(key[0]);
else if (key[1] != null)
return __keyMap.has(key[1]);
else
throw new Error("Must specify at least one key.");
};
DualKeyDict.prototype.set = function (key, value) {
if (key.length != 2)
throw new Error("key must be array of length 2.");
__items[key[0]] = value;
__keyMap[key[1]] = key[0];
};
DualKeyDict.prototype.get = function (key) {
if (key.length != 2)
throw new Error("key must be array of length 2.");
if (key[0] != null)
return __items.get(key[0]);
else if (key[1] != null)
return __items[__keyMap.get(key[1])];
else
throw new Error("Must specify at least one key.");
};
DualKeyDict.prototype.delete = function (key) {
if (key.length != 2)
throw new Error("key must be array of length 2.");
if (key[0] != null) {
__items.delete(key[0]);
__keyMap.has(key[1]);
}
if (key[1] != null) {
__items[__keyMap.get(key[1])].delete();
__keyMap.delete(key[1]);
}
};