Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.collections.SortedList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.collections.SortedList"] = true;dojo.provide("dojox.collections.SortedList");dojo.require("dojox.collections._base");dojox.collections.SortedList=function(/* object? */ dictionary){// summary// creates a collection that acts like a dictionary but is also internally sorted.// Note that the act of adding any elements forces an internal resort, making this object potentially slow.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(/* string */ k,/* object */v){// summary// add the passed value to the dictionary at location kif (!items[k]) {items[k]=new dojox.collections.DictionaryEntry(k,v);this.count=q.push(items[k]);q.sort(sorter);}};this.clear=function(){// summary// clear the internal collectionsitems={};q=[];this.count=q.length;};this.clone=function(){// summary// create a clone of this sorted listreturn new dojox.collections.SortedList(this); // dojox.collections.SortedList};this.contains=this.containsKey=function(/* string */ k){// summary// Check to see if the list has a location kif(testObject[k]){return false; // bool}return (items[k]!=null); // bool};this.containsValue=function(/* object */ o){// summary// Check to see if this list contains the passed objectvar e=this.getIterator();while (!e.atEnd()){var item=e.get();if(item.value==o){return true; // bool}}return false; // bool};this.copyTo=function(/* array */ arr, /* int */ i){// summary// copy the contents of the list into array arr at index ivar e=this.getIterator();var idx=i;while(!e.atEnd()){arr.splice(idx,0,e.get());idx++;}};this.entry=function(/* string */ k){// summary// return the object at location kreturn items[k]; // dojox.collections.DictionaryEntry};this.forEach=function(/* function */ fn, /* object? */ scope){// summary// functional iterator, following the mozilla spec.dojo.forEach(q, fn, scope);};this.getByIndex=function(/* int */ i){// summary// return the item at index ireturn q[i].valueOf(); // object};this.getIterator=function(){// summary// get an iterator for this objectreturn new dojox.collections.DictionaryIterator(items); // dojox.collections.DictionaryIterator};this.getKey=function(/* int */ i){// summary// return the key of the item at index ireturn q[i].key;};this.getKeyList=function(){// summary// return an array of the keys set in this listvar arr=[];var e=this.getIterator();while (!e.atEnd()){arr.push(e.get().key);}return arr; // array};this.getValueList=function(){// summary// return an array of values in this listvar arr=[];var e=this.getIterator();while (!e.atEnd()){arr.push(e.get().value);}return arr; // array};this.indexOfKey=function(/* string */ k){// summary// return the index of the passed key.for (var i=0; i<q.length; i++){if (q[i].key==k){return i; // int}}return -1; // int};this.indexOfValue=function(/* object */ o){// summary// return the first index of object ofor (var i=0; i<q.length; i++){if (q[i].value==o){return i; // int}}return -1; // int};this.item=function(/* string */ k){// summary// return the value of the object at location k.if(k in items && !testObject[k]){return items[k].valueOf(); // object}return undefined; // object};this.remove=function(/* string */k){// summary// remove the item at location k and rebuild the internal collections.delete items[k];build();this.count=q.length;};this.removeAt=function(/* int */ i){// summary// remove the item at index i, and rebuild the internal collections.delete items[q[i].key];build();this.count=q.length;};this.replace=function(/* string */ k, /* object */ v){// summary// Replace an existing item if it's there, and add a new one if not.if (!items[k]){// we're adding a new object, return falsethis.add(k,v);return false; // bool}else{// we're replacing an object, return trueitems[k]=new dojox.collections.DictionaryEntry(k,v);build();return true; // bool}};this.setByIndex=function(/* int */ i, /* object */ o){// summary// set an item by indexitems[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 dojox.collections.DictionaryEntry(item.key,item.value);}q.sort(sorter);}}}