00001 /* 00002 Copyright 1996-2001 00003 Simon Whiteside 00004 00005 * $Id: skAlist_h-source.html,v 1.8 2001/05/14 07:43:34 sdw Exp $ 00006 */ 00007 00008 #ifndef skALIST_H 00009 #define skALIST_H 00010 00011 00012 #include "skGeneral.h" 00013 00014 class skAList; 00015 00019 class skAListIterator 00020 { 00021 public: 00025 void reset(); 00029 virtual ~skAListIterator(); 00030 protected: 00034 skAListIterator(const skAList&); 00038 skAListIterator& operator=(const skAListIterator&); 00042 void * operator()(); 00043 private: 00047 USize m_Current; 00051 const skAList& m_AList; 00052 }; 00057 class skAList 00058 { 00059 public: 00063 skAList(); 00069 skAList(USize initial_size,USize growth_increment); 00073 virtual ~skAList(); 00077 void clearAndDestroy(); 00081 void clear(); 00085 USize entries() const; 00089 void deleteElt(USize n); 00093 void test() const; 00097 void growTo(USize size); 00098 protected: 00102 void insert(void *,USize index); 00106 void prepend(void *); 00110 void append(void *); 00114 void remove(void *); 00118 void removeAndDestroy(void *); 00122 void * operator[](USize n) const; 00126 int index(const void *) const; 00130 bool contains(const void *) const; 00134 virtual void deleteItem(void *)=0; 00135 friend class skAListIterator; 00139 int findElt(const void * i) const; 00143 void grow(); 00147 void ** m_Array; 00151 USize m_ArraySize; 00155 USize m_Entries; 00159 USize m_GrowthIncrement; 00160 00161 private: 00165 static const USize DEFAULT_SIZE; 00169 static const USize DEFAULT_GROWTH_INCREMENT; 00173 skAList(const skAList&); 00177 skAList& operator=(const skAList&); 00178 }; 00182 template <class T> class skTAList : public skAList 00183 { 00184 public: 00188 skTAList(); 00192 skTAList(const skTAList<T>&); 00196 skTAList(USize initial_size,USize growth_increment); 00200 virtual ~skTAList(); 00204 void insert(T *,USize index); 00208 void prepend(T *); 00212 void append(T *); 00216 void remove(T *); 00220 void removeAndDestroy(T *); 00224 T * operator[](USize n) const; 00228 int index(const T *) const; 00232 bool contains(const T *) const; 00236 skTAList<T>& operator=(const skTAList<T>& l); 00237 protected: 00241 void deleteItem(void *); 00242 }; 00246 template <class T> class skTAListIterator : public skAListIterator 00247 { 00248 public: 00252 skTAListIterator(const skTAList<T>&); 00256 T * operator()(); 00257 }; 00258 00259 #include "skAlist.inl" 00260 00261 #endif 00262 00263 00264 00265