blob: c748b73cc11468cb1359aa75af51d8245c9cf550 [file] [log] [blame]
/*
Copyright (c) 2004-2006, The Dojo Foundation
All Rights Reserved.
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
http://dojotoolkit.org/community/licensing.shtml
*/
dojo.provide("dojo.collections.SortedList");
dojo.require("dojo.collections.Collections");
dojo.collections.SortedList = function (dictionary) {
var _this = this;
var items = {};
var q = [];
var sorter = function (a, b) {
if (a.key > b.key) {
return 1;
}
if (a.key < b.key) {
return -1;
}
return 0;
};
var build = function () {
q = [];
var e = _this.getIterator();
while (!e.atEnd()) {
q.push(e.get());
}
q.sort(sorter);
};
var testObject = {};
this.count = q.length;
this.add = function (k, v) {
if (!items[k]) {
items[k] = new dojo.collections.DictionaryEntry(k, v);
this.count = q.push(items[k]);
q.sort(sorter);
}
};
this.clear = function () {
items = {};
q = [];
this.count = q.length;
};
this.clone = function () {
return new dojo.collections.SortedList(this);
};
this.contains = this.containsKey = function (k) {
if (testObject[k]) {
return false;
}
return (items[k] != null);
};
this.containsValue = function (o) {
var e = this.getIterator();
while (!e.atEnd()) {
var item = e.get();
if (item.value == o) {
return true;
}
}
return false;
};
this.copyTo = function (arr, i) {
var e = this.getIterator();
var idx = i;
while (!e.atEnd()) {
arr.splice(idx, 0, e.get());
idx++;
}
};
this.entry = function (k) {
return items[k];
};
this.forEach = function (fn, scope) {
var s = scope || dj_global;
if (Array.forEach) {
Array.forEach(q, fn, s);
} else {
for (var i = 0; i < q.length; i++) {
fn.call(s, q[i], i, q);
}
}
};
this.getByIndex = function (i) {
return q[i].valueOf();
};
this.getIterator = function () {
return new dojo.collections.DictionaryIterator(items);
};
this.getKey = function (i) {
return q[i].key;
};
this.getKeyList = function () {
var arr = [];
var e = this.getIterator();
while (!e.atEnd()) {
arr.push(e.get().key);
}
return arr;
};
this.getValueList = function () {
var arr = [];
var e = this.getIterator();
while (!e.atEnd()) {
arr.push(e.get().value);
}
return arr;
};
this.indexOfKey = function (k) {
for (var i = 0; i < q.length; i++) {
if (q[i].key == k) {
return i;
}
}
return -1;
};
this.indexOfValue = function (o) {
for (var i = 0; i < q.length; i++) {
if (q[i].value == o) {
return i;
}
}
return -1;
};
this.item = function (k) {
if (k in items && !testObject[k]) {
return items[k].valueOf();
}
return undefined;
};
this.remove = function (k) {
delete items[k];
build();
this.count = q.length;
};
this.removeAt = function (i) {
delete items[q[i].key];
build();
this.count = q.length;
};
this.replace = function (k, v) {
if (!items[k]) {
this.add(k, v);
return false;
} else {
items[k] = new dojo.collections.DictionaryEntry(k, v);
q.sort(sorter);
return true;
}
};
this.setByIndex = function (i, o) {
items[q[i].key].value = o;
build();
this.count = q.length;
};
if (dictionary) {
var e = dictionary.getIterator();
while (!e.atEnd()) {
var item = e.get();
q[q.length] = items[item.key] = new dojo.collections.DictionaryEntry(item.key, item.value);
}
q.sort(sorter);
}
};