Subversion Repositories Applications.papyrus

Rev

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 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);
        }
}

}