Rev 1318 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*Copyright (c) 2004-2006, The Dojo FoundationAll Rights Reserved.Licensed under the Academic Free License version 2.1 or above OR themodified 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);}};