]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/collections/SortedList.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / collections / SortedList.js
diff --git a/static/dojo-release-1.1.1/dojox/collections/SortedList.js b/static/dojo-release-1.1.1/dojox/collections/SortedList.js
new file mode 100644 (file)
index 0000000..e9f1235
--- /dev/null
@@ -0,0 +1,198 @@
+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 k
+               if (!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 collections
+               items={};
+               q=[];
+               this.count=q.length;
+       };
+       this.clone=function(){
+               //      summary
+               //      create a clone of this sorted list
+               return 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 k
+               if(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 object
+               var 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 i
+               var 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 k
+               return 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 i
+               return q[i].valueOf();  //      object
+       };
+       this.getIterator=function(){
+               //      summary
+               //      get an iterator for this object
+               return new dojox.collections.DictionaryIterator(items); //      dojox.collections.DictionaryIterator
+       };
+       this.getKey=function(/* int */ i){
+               //      summary
+               //      return the key of the item at index i
+               return q[i].key;
+       };
+       this.getKeyList=function(){
+               //      summary
+               //      return an array of the keys set in this list
+               var 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 list
+               var 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 o
+               for (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 false
+                       this.add(k,v);
+                       return false; // bool
+               }else{
+                       //      we're replacing an object, return true
+                       items[k]=new dojox.collections.DictionaryEntry(k,v);
+                       build();
+                       return true; // bool
+               }
+       };
+       this.setByIndex=function(/* int */ i, /* object */ o){
+               //      summary
+               //      set an item by index
+               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 dojox.collections.DictionaryEntry(item.key,item.value);
+               }
+               q.sort(sorter);
+       }
+}
+
+}