Fixes
[opsoft.git] / silentbob / gclib / src / darray.cxx
blob6e9a4cda3b8735cb03ccbd52aad4a500848852be
1 /*
2 * (c) Oleg Puchinin 2005,2006
3 * graycardinalster@gmail.com
5 */
7 #include <gclib/gclib.h>
8 #include <gclib/gclib_c.h>
10 DArray::DArray (int asize)
12 init (asize);
15 DArray::~DArray ()
17 drop ();
20 char * DArray::get (int NUM)
22 if (NUM >= size)
23 return NULL;
25 if (NUM < 0)
26 return NULL;
28 return values[NUM];
31 bool DArray::add (char * VALUE)
33 if (values == NULL) {
34 used = 0;
35 size = 16;
36 values = CNEW(char *,size);
37 memset (values, 0, sizeof (char *) * size);
40 if (used < size) {
41 values[used] = VALUE;
42 used++;
43 return true;
44 } else {
45 values = (char **) gc_realloc ((char *)values,
46 (sizeof (char *)*size),
47 (sizeof (char *) * (size << 1)));
48 if (values == NULL)
49 return false;
50 size <<= 1;
51 values[used] = VALUE;
52 used++;
53 return true;
57 void DArray::drop ()
59 if (values) {
60 delete [] values;
61 values = NULL;
63 used = 0;
64 size = 0;
67 int DArray::get_size ()
69 return used;
72 int DArray::set_size (int a_used)
74 int old = used;
75 used = a_used;
76 return old;
79 void DArray::foreach (Dfunc_t FUNC)
81 for (int i = 0; i < used; i++)
82 FUNC(values[i]);
85 void DArray::set (long ARGA, char * S)
87 values[ARGA] = S;
90 void DArray::init (int asize)
92 values = NULL;
93 used = 0;
94 if (asize > 0) {
95 size = asize;
96 } else {
97 size = 16;
98 asize = 16;
101 values = CNEW(char *, asize);
102 memset (values, 0, asize * sizeof (char *));
105 bool DArray::from_file (char * __from)
107 char * buf;
108 FILE * m_file;
110 m_file = fopen (__from, "r");
111 if (m_file == NULL)
112 return false;
114 buf = CNEW (char, 256);
115 while (true) {
116 if (fgets (buf, 256, m_file) == NULL)
117 break;
119 add (strdup (buf));
122 fclose (m_file);
123 DROP (buf);
124 return true;