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