37 GPA (
void) { size = 0; asize = 0; dsize = 0; values = NULL; }
53 T **newvals =
new T* [new_asize];
55 for (asize=0; asize<
size; asize++) *newvals++ = *values++;
56 for ( ; asize<new_asize; asize++) *newvals++ = NULL;
58 delete [] (values-
size);
59 values = newvals-new_asize;
63 memset (values+newsize, 0, (asize-newsize)*
sizeof(T*));
69 if (new_asize == asize)
return;
76 if (new_asize == 0) new_asize = asize + (dsize ? dsize : 0.1*asize+1);
77 if (new_asize <= asize)
85 if (new_asize >= asize)
errol;
110 void free_ptrs (
void) { memset (values, 0, (asize)*
sizeof(T*)); }
111 void free_ptr (T *val) {
for (
long i=0; i<
size; i++)
if (values[i] == val) values[i] = NULL; }
125 if (asize) { values =
new T* [
asize]; memset (values, 0, asize*
sizeof(T*)); }
131 size = asize = src->
size;
132 ; dsize = src->
dsize;
134 values =
new T* [
asize];
135 memcpy (values, src->
values, size*
sizeof(T*));
144 values[n] = values[size-1-n];
145 values[size-1-n] = val;
160 values[size++] = val;
166 if (i<0 || i>=size)
errol;
169 for (
long ii=size; ii>=i; ii--)
170 values[ii] = values[ii-1];
177 T **newa =
new T* [++
size];
179 for (asize=0; asize<i ; asize++) *newa++ = *values++;
180 ; asize++; *newa++ = val;
181 for ( ; asize<
size; asize++) *newa++ = *values++;
184 delete [] (values-size+1);
197 for (
long i=0; i<
size; i++)
198 if (values[i] == oldv) {
212 const T**
v (
void)
const {
return const_cast<const T**
>(
values); }
224 if (!size)
_errorr (
"GPA has no members");
230 if (!size)
_errorr (
"GPA has no members");
232 return values[size-1];
236 return ( (i<0 || i>=size ) ? NULL : values[i]);
247 for (i=0; i<
size; i++)
if (values[i]) sum++;
285 if (size != s)
return false;
288 const T **vals =
new T* [
size];
289 for (i=0; i<
size; i++) vals[i] = one[i];
291 for (i=0; i<
size; i++) {
292 for (j=0; j<
size; j++)
293 if (vals[j] && values[i] == vals[j]) {
298 if (j == size)
break;
303 return (i == size) ?
true :
false;
316 for (j=0; j<size; j++)
317 if (values[j] == NULL)
break;
319 for (i=j+1; i<size; i++)
321 values[j++] = values[i];
332 this->realloc(size+src());
334 for (
long i=0; i<src(); i++)
335 if (! this->is_member (src[i]))
336 values[size++] = src[i];
338 if (asize-size>100 && asize>1.5*size)
errol;
344 #endif // GELIB_GPA_H
void reallocup(long new_asize)
reallocate up receiver with checking the new size
long give_asize(void) const
long give_size(void) const
void add_unique(T *src)
add new pointer "src" if unique
bool members_are_unique(long n, const ArgType *array)
check out all members of array "a" are uniq
void free_ptrs_core(long newsize)
reallocate down (free pointers) receiver without checking of sizes
T * wedge(long i, T *val)
bool is_identical_with(const GPA< T > &one) const
long operator()(void) const
void be_copy_of(const GPA< T > *src)
T * at_or_null(long i) const
bool has_same_members_as(const GPA< T > &one) const
void realloc_core(long new_asize)
reallocate up receiver without checking of sizes
T * add(T *val)
add (assign) new pointer to the end; enlarge the receiver if too small
void initialize(long s, long ds=0)
long is_member_of_array(ArgType val, long n, const ArgType *array)
check out "val" is member of "array"
void reallocdown(long new_asize)
reallocate up receiver with checking the new size
bool has_these_members(const GPA< T > &one) const
bool replace_member_by(T *oldv, T *newv)
long give_num_nonNULL_ptrs2() const
get sum of nonNULL pointers in two levels
GPA(long s, long ds=1)
CONSTRUCTOR.
void resize(long newsize)
reallocate receiver to the new size
void reallocplus(long d)
reallocate receiver to the new size
void resizeup(long newsize)
long give_num_nonNULL_ptrs() const
get sum of nonNULL pointers in two levels
GPA - Generic Pointer Array, template class manages 1d array of pointers to objects of type T...
bool is_member(T *val) const
void assign(long i, T *val)
void delete_object(long i)
Delete object pointed by the i-th pointer. The pointer is set to NULL.
void delete_objects(void)
Delete all objects pointed by pointers. The pointers are set to NULL.
bool has_these_members(long s, const T **one) const
T * operator[](long i) const
bool same_array_elements_asym(long nx, const ArgType *x, long ny, const ArgType *y, bool same_dim=false)
Function finds out whether every element of the array 'x' is in the array 'y'.
GPA(const GPA< T > *src)
CONSTRUCTOR COPY.
void realloc(long new_asize)
reallocate up receiver with checking the new size
void resizedown(long newsize)
long arrays_arenot_identical(long n, ArgType *a1, ArgType *a2)
bool is_unique(void) const