home *** CD-ROM | disk | FTP | other *** search
-
- #include <classes/DataStructures/GenArray.h>
-
- #include <string.h>
-
- #define DEFAULTSIZE 16
- #define FACTOR 2
-
- gen_array::gen_array(ULONG es, ULONG s)
- {
- if (!s)
- s = DEFAULTSIZE;
- v = new UBYTE[s*es];
- if (!v)
- throw MemoryX(s*es);
- element_size = es;
- size = s;
- }
-
- gen_array::gen_array(const gen_array &c)
- {
- element_size = c.element_size;
- size = c.size;
- v = new UBYTE[size*element_size];
- if (!v)
- throw MemoryX(size*element_size);
- memcpy(v,c.v,size*element_size);
- }
-
- gen_array &gen_array::operator= (const gen_array &c)
- {
- if (this != &c)
- {
- delete [] v;
- element_size = c.element_size;
- size = c.size;
- v = new UBYTE[size*element_size];
- if (!v)
- throw MemoryX(size*element_size);
- memcpy(v,c.v,size*element_size);
- };
- return *this;
- }
-
- gen_array::~gen_array()
- {
- delete [] v;
- }
-
- void & gen_array::operator [] (ULONG i)
- {
- if (i>=size)
- extend(i);
- return (VOID &) *(v+(i*element_size));
- }
-
- VOID gen_array::extend(ULONG i)
- {
- if (i >= FACTOR*size)
- {
- UBYTE *w = new UBYTE[(i+1)*element_size];
- if (!w)
- throw MemoryX((i+1)*element_size);
- memcpy(w,v,size*element_size);
- delete [] v;
- v = w;
- size = i+1;
- }
- else {
- UBYTE *w = new UBYTE[size*FACTOR*element_size];
- if (!w)
- throw MemoryX(size*FACTOR*element_size);
- memcpy(w,v,size*element_size);
- delete [] v;
- v = w;
- size = size*FACTOR;
- };
- }
-
- // *************************************************************
-
-