OrderedMap
by mmarcon
HTML
<section id="console">
</section>
CSS
@import url(http://fonts.googleapis.com/css?family=Anonymous+Pro);
#console {
margin: 1em;
font-family: 'Anonymous Pro', monospaced;
}
JavaScript
var OrderedMap = function() {
var storage = [];
storage.map = {};
this.length = 0;
this.push = function() {
var a, arg;
for (a in arguments) {
arg = arguments[a];
storage.push (arg);
if (arg.id) {
storage.map [arg.id] = {pos: storage.length - 1, data: arg};
}
}
this.length = storage.length;
};
this.unshift = function() {
var a, arg, ma;
for (a in arguments) {
arg = arguments[a];
storage.unshift (arg);
if (arg.id) {
for (ma in storage.map) {
if (storage.map [ma] && storage.map [ma].pos) {
storage.map [ma].pos ++;
}
}
storage.map [arg.id] = {pos: 0, data: arg};
}
}
this.length = storage.length;
};
this.put = function (key, value) {
storage.push (value);
storage.map [key] = {pos: storage.length - 1, data: value};
};
this.get = function (key) {
var s = storage.map [key];
return s ? s.data : null;
};
this.remove = function (key) {
var index = storage.map [key].pos;
storage.splice (index, 1);
storage.map [key] = null;
delete storage.map [key];
};
this.getAtPosition = function (pos) {
return storage [pos];
};
};
$(function(){
function log (message) {
$('#console').append('<p>' + message + '</p>');
}
log ('------------');
log ('OrderedMap');
log ('Version: 0.1');
log ('------------');
var om = new OrderedMap();
log ('Initialized OrderedMap. Length is ' + om.length);
om.push ({a: 0, b: 0, id: 1}, {a: 2, b: 3, id: 2});
log ('Added objects to OrderedMap. Length is ' + om.length);
log ('Object with id = 1 is ' + JSON.stringify (om.get(1)));
log ('Removing object with...