00001 template <class type> class QList 00002 { 00003 int num, limit, ptr, autoDelete; 00004 type **data; 00005 00006 public: 00007 QList() 00008 { 00009 autoDelete = 0; 00010 num = 0; 00011 limit = 20; 00012 ptr = -1; 00013 data = new type*[20]; 00014 for(int i = 0; i < limit; i++) 00015 data[i] = NULL; 00016 } 00017 00018 void append(type* p) 00019 { 00020 if (num == limit) 00021 { 00022 limit += 20; 00023 type **n_data = new type*[limit]; 00024 for (int i = 0; i < num; i++) 00025 n_data[i] = data[i]; 00026 delete data; 00027 data = n_data; 00028 } 00029 data[num++] = p; 00030 } 00031 00032 type* at(int i) 00033 { 00034 if (i < 0 || i >= num) 00035 return NULL; 00036 return data[i]; 00037 } 00038 00039 int at() 00040 { 00041 return ptr; 00042 } 00043 00044 type* first() 00045 { 00046 return data[ptr = 0]; 00047 } 00048 00049 type* next() 00050 { 00051 return data[++ptr]; 00052 } 00053 00054 void setAutoDelete(int d) 00055 { 00056 autoDelete = d; 00057 } 00058 00059 void clear() 00060 { 00061 if (autoDelete) 00062 { 00063 for (int i = 0; i < num; i++) 00064 delete data[i]; 00065 } 00066 delete [] data; 00067 } 00068 00069 int count() 00070 { 00071 return num; 00072 } 00073 };