00001 /* 00002 Copyright 1996-2000 Simon Whiteside 00003 00004 * $Id: skAlist.h-source.html,v 1.1 2001/03/05 16:22:45 sdw Exp $ 00005 */ 00006 00007 #ifndef skALIST_H 00008 #define skALIST_H 00009 00010 00011 #include "skGeneral.h" 00012 00013 class skAList; 00014 00018 class skAListIterator 00019 { 00020 public: 00024 void reset(); 00028 virtual ~skAListIterator(); 00029 protected: 00033 skAListIterator(const skAList&); 00037 skAListIterator& operator=(const skAListIterator&); 00041 void * operator()(); 00042 private: 00046 USize m_Current; 00050 const skAList& m_AList; 00051 }; 00055 00056 class skAList 00057 { 00058 public: 00062 skAList(); 00068 skAList(USize initial_size,USize growth_increment); 00072 virtual ~skAList(); 00076 void clearAndDestroy(); 00080 void clear(); 00084 USize entries() const; 00088 void deleteElt(USize n); 00092 void test() const; 00096 void growTo(USize size); 00097 protected: 00101 void insert(void *,USize index); 00105 void prepend(void *); 00109 void append(void *); 00113 void remove(void *); 00117 void removeAndDestroy(void *); 00121 void * operator[](USize n) const; 00125 int index(const void *) const; 00129 bool contains(const void *) const; 00133 virtual void deleteItem(void *)=0; 00134 friend class skAListIterator; 00138 int findElt(const void * i) const; 00142 void grow(); 00146 void ** m_Array; 00150 USize m_ArraySize; 00154 USize m_Entries; 00158 USize m_GrowthIncrement; 00159 00160 private: 00164 static const USize DEFAULT_SIZE; 00168 static const USize DEFAULT_GROWTH_INCREMENT; 00172 skAList(const skAList&); 00176 skAList& operator=(const skAList&); 00177 }; 00181 template <class T> class skTAList : public skAList 00182 { 00183 public: 00187 skTAList(); 00191 skTAList(const skTAList<T>&); 00195 skTAList(USize initial_size,USize growth_increment); 00199 virtual ~skTAList(); 00203 void insert(T *,USize index); 00207 void prepend(T *); 00211 void append(T *); 00215 void remove(T *); 00219 void removeAndDestroy(T *); 00223 T * operator[](USize n) const; 00227 int index(const T *) const; 00231 bool contains(const T *) const; 00235 skTAList<T>& operator=(const skTAList<T>& l); 00236 protected: 00240 void deleteItem(void *); 00241 }; 00245 template <class T> class skTAListIterator : public skAListIterator 00246 { 00247 public: 00251 skTAListIterator(const skTAList<T>&); 00255 T * operator()(); 00256 }; 00257 00258 #include "skAlist.inl" 00259 00260 #endif 00261 00262 00263 00264