/**
* binary search list
*/
function testsortedlist(){
alert("sortedlist test begin:");
try{
var list=new arraylist();
var s=new sortedlist();
s.add(new javastring("wsg"));
assert(s.size()==1);
assert(s.indexof(new javastring("wsg"))==0);
list.add(new javastring("hello"));
list.add(new javastring("tom"));
list.add(new javastring("bush"));
s.add(new javastring("sina"));
s.add(new javastring("163"));
s.add(new javastring("csdn"));
s.addall(list);
assert(s.size()==7);
assert(s.indexof(new javastring("sina"))==4);
assert(s.indexof(new javastring("ssn"))==5);
assert(s.indexof(new javastring("sa"))==4);
//var s2=s.sublist(4,7);
for(var i=0;i<s.size();i++){
alert(s.get(i));
}
}
catch(e){
alert(e);
}
alert("sortedlist test end");
}
function sortedlist(){
private:
this.buffer =new array();
var args=sortedlist.arguments;
if(args.length>0) this.buffer=args[0];
this.length=this.buffer.length;
com=null;
function listiterator(table,len){
this.table=table;
this.len=len;
this.index=0;
this.hasnext=hasnext;
function hasnext() {
return this.index< this.len;
}
this.next=next;
function next() {
if(!this.hasnext())
throw "no such element!";
return this.table[this.index++];
}
}
public:
this.setcomparator=setcomparator;
function setcomparator(comp){
if(this.length!=0) throw "only can be set when list is empty";
this.com=comp;
}
this.getcomparator=getcomparator;
function getcomparator(){
return this.com;
}
this.hashcode=hashcode;
function hashcode(){
var h=0;
for(var i=0;i<this.length;i++)
h+=this.buffer[i].hashcode();
return h;
}
this.size=size;
function size(){
return this.length;
}
this.clear=clear;
function clear(){
this.length=0;
}
this.isempty=isempty;
function isempty(){
return this.length==0;
}
this.toarray=toarray;
function toarray(){
var copy=new array();
for(var i=0;i<this.length;i++){
copy[i]=this.buffer[i];
}
return copy;
}
this.get=get;
function get(index){
if(index>=0 && index<this.length)
return this.buffer[index];
return null;
}
this.remove=remove;
function remove(param){
var index=0;
if(isnan(param)){
index=this.indexof(param);
}
else index=param;
if(index>=0 && index<this.length){
for(var i=index;i<this.length-1;i++)
this.buffer[i]=this.buffer[i+1];
this.length--;
return true;
}
else return false;
}
this.add=add;
function add(obj){
var index = this.indexof(obj);
for(var i=this.length;i>index;){
this.buffer[i]=this.buffer[--i];
}
this.buffer[index]=obj;
this.length++;