00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00042
00043
00044
00045
00046
00047
00053 template <class T> class array_c
00054 {
00055 protected:
00056
00057 T **data;
00058 long count;
00059
00060 public:
00061
00062 array_c()
00064 {
00065 count = 1;
00066 data = new T*[count];
00067 memset(data, 0, sizeof(T*)*count);
00068 }
00069
00070 virtual
00071 ~array_c()
00073 {
00074 AssertThis;
00075
00076 SafeArrayDelete(data);
00077 }
00078
00079 long
00080 get_free()
00086 {
00087 AssertThisV;
00088
00089 long i;
00090
00091 for (i=0; i<count; i++)
00092 if (!data[i])
00093 return i;
00094
00095 return count;
00096 }
00097
00098 long
00099 add(T* ptr)
00105 {
00106 AssertThisV;
00107
00108 long l = get_free();
00109
00110 if (l==INVALID_INDEX)
00111 return l;
00112
00113 set(l,ptr);
00114
00115 return l;
00116 }
00117
00118 void
00119 remove(long i)
00125 {
00126 AssertThis;
00127
00128 if (i>=count || i<0)
00129 return;
00130
00131 data[i] = NULL;
00132 }
00133
00134 void
00135 remove_ptr(T* ptr, bool all = true)
00142 {
00143 AssertThis;
00144
00145 for (slong i=0; i<count; i++)
00146 {
00147 if (data[i] == ptr)
00148 {
00149 data[i] = NULL;
00150 if (!all)
00151 break;
00152 }
00153 }
00154 }
00155
00156 void
00157 set(long i, T* ptr)
00165 {
00166 AssertThis;
00167 AssertReturn1(i>=0)
00168
00169 if (i>=count)
00170 {
00171 long newcount = i+1;
00172
00173 T **data2;
00174 data2 = new T*[newcount];
00175 memset(data2, 0, sizeof(T*)*newcount);
00176
00177 for (i=0; i<count; i++)
00178 data2[i] = data[i];
00179
00180 SafeArrayDelete(data);
00181 data = data2;
00182
00183 count = newcount;
00184 }
00185
00186 data[i] = ptr;
00187 }
00188
00189 T*
00190 get(long i)
00196 {
00197 AssertThisV;
00198
00199 if (i>=count || i<0)
00200 return NULL;
00201
00202 return data[i];
00203 }
00204
00205 long
00206 find(T* ptr)
00212 {
00213 AssertThisValue(INVALID_INDEX);
00214
00215 long i;
00216
00217 for (i=0; i<count; i++)
00218 if (data[i] == ptr)
00219 return i;
00220
00221 return INVALID_INDEX;
00222 }
00223
00224 long
00225 get_count()
00230 {
00231 AssertThisValue(INVALID_INDEX);
00232 return count+1;
00233 };
00234
00235 void
00236 clear()
00241 {
00242 AssertThis;
00243
00244 SafeArrayDelete(data);
00245 count = 1;
00246 data = new T*[count];
00247 memset(data, 0, sizeof(T*)*count);
00248 };
00249 };