47#ifndef ARRAYLIST_HEADER
48#define ARRAYLIST_HEADER
113 sint32 _sortedLookup(
IN T &target,
int ascending);
124 bit8 growVector(
void);
125 bit8 shrinkVector(
void);
154 delete[]((
uint8*)Vector_);
167 for (
int i=0; i<other.length(); i++)
180 for (
int i=0; i<Entries_; i++)
200 int oldEntries=Entries_;
207 while (newsize > Slots_)
211 for (
int i=oldEntries; i<Entries_; i++)
214 new((
void *)(Vector_+i)) T(filler);
218 if ((Entries_*3) <= Slots_)
234 if (Entries_ >= Slots_)
240 memmove(Vector_+pos+1,Vector_+pos,
sizeof(T)*(Entries_-pos));
247 new((
void *)(Vector_+pos)) T((T &)node);
265 return(
add(node,length()));
274 sint32 pos = _sortedLookup(node, 1);
275 return(
add(node, pos));
284 sint32 pos = _sortedLookup(node, 0);
285 return(
add(node, pos));
291sint32 ArrayList<T>::_sortedLookup(
IN T &target,
int ascending)
307 assert( low <= high );
308 mid = low + (int)(floor(((
double)high - (
double)low) / (
double)2));
310 getPointer(&lowtarget, low);
311 getPointer(&hightarget, high);
312 getPointer(&midtarget, mid);
315 if( *midtarget == target )
return mid;
322 if( target <= *lowtarget )
329 if( target <= *lowtarget )
337 if( (high - low) == 1 )
341 if( target <= *lowtarget )
343 else if( target <= *hightarget )
350 if( target <= *hightarget )
352 else if( target <= *lowtarget )
362 if( target < *midtarget )
369 if( target < *midtarget )
516 new((
void *)(Vector_+pos)) T(node);
538 memmove(Vector_+pos,Vector_+pos+1,
sizeof(T)*(Entries_-pos-1));
543 if ( (Entries_*3) <= Slots_)
556 retval=get(node,pos);
567 return(remove(node,0));
575 return(remove(node,Entries_-1));
584 if ((pos < 0)||(pos >= Entries_))
586 *node=&(Vector_[pos]);
595 if ((pos < 0)||(pos >= Entries_))
614 return(get(node,Entries_-1));
621 fprintf(out,
"--------------------\n");
624 fprintf(out,
"Entries: %d Slots: %d sizeof(T): %d\n",Entries_,Slots_,
626 fprintf(out,
"--------------------\n");
638bit8 ArrayList<T>::growVector(
void)
640 if (Entries_ < Slots_)
643 int newSlots=Entries_*2;
644 if(newSlots < INITIAL_SIZE)
645 newSlots=INITIAL_SIZE;
654 T *newVector=(T *)(
new uint8[newSlots *
sizeof(T)]);
655 memset(newVector,0,newSlots *
sizeof(T));
658 memcpy(newVector,Vector_,Entries_*
sizeof(T));
660 delete[]((
uint8 *)Vector_);
672bit8 ArrayList<T>::shrinkVector(
void)
677 if ( (Entries_*3) > Slots_)
680 int newSlots=Slots_/2;
681 if(newSlots < INITIAL_SIZE)
682 newSlots=INITIAL_SIZE;
684 if (newSlots >= Slots_)
694 T *newVector=(T *)(
new uint8[newSlots *
sizeof(T)]);
697 memcpy(newVector,Vector_,Entries_*
sizeof(T));
699 delete[]((
uint8 *)Vector_);
void add(float *sum, float *addend)
ArrayList< T > & operator=(IN ArrayList< T > &other)
bit8 get(OUT T &node, sint32 pos) RO
bit8 getTail(OUT T &node) RO
bit8 replace(IN T &node, sint32 pos)
bit8 getPointer(OUT T **node, sint32 pos) RO
bit8 removeHead(OUT T &node)
bit8 getHead(OUT T &node) RO
bit8 setSize(sint32 newsize, IN T &filler)
ArrayList(ArrayList< T > &other)
bit8 addSortedAsc(IN T &node)
bit8 add(IN T &node, sint32 pos)
bit8 removeTail(OUT T &node)
bit8 addSortedDes(IN T &node)
bit8 remove(OUT T &node, sint32 pos)