1 /* $Header: array.c,v 2.0 88/06/05 00:08:17 root Exp $
4 * Revision 2.0 88/06/05 00:08:17 root
5 * Baseline version 2.0.
17 if (key < 0 || key > ar->ary_fill)
19 return ar->ary_array[key];
32 if (key > ar->ary_max) {
33 int newmax = key + ar->ary_max / 5;
35 ar->ary_array = (STR**)saferealloc((char*)ar->ary_array,
36 (newmax+1) * sizeof(STR*));
37 bzero((char*)&ar->ary_array[ar->ary_max+1],
38 (newmax - ar->ary_max) * sizeof(STR*));
41 while (ar->ary_fill < key) {
42 if (++ar->ary_fill < key && ar->ary_array[ar->ary_fill] != Nullstr) {
43 str_free(ar->ary_array[ar->ary_fill]);
44 ar->ary_array[ar->ary_fill] = Nullstr;
47 retval = (ar->ary_array[key] != Nullstr);
49 str_free(ar->ary_array[key]);
50 ar->ary_array[key] = val;
59 if (key < 0 || key > ar->ary_max)
61 if (ar->ary_array[key]) {
62 str_free(ar->ary_array[key]);
63 ar->ary_array[key] = Nullstr;
73 register ARRAY *ar = (ARRAY*)safemalloc(sizeof(ARRAY));
75 ar->ary_array = (STR**) safemalloc(5 * sizeof(STR*));
76 ar->ary_magic = str_new(0);
77 ar->ary_magic->str_link.str_magic = stab;
81 bzero((char*)ar->ary_array, 5 * sizeof(STR*));
93 for (key = 0; key <= ar->ary_max; key++)
94 str_free(ar->ary_array[key]);
96 bzero((char*)ar->ary_array, (ar->ary_max+1) * sizeof(STR*));
107 for (key = 0; key <= ar->ary_max; key++)
108 str_free(ar->ary_array[key]);
109 str_free(ar->ary_magic);
110 safefree((char*)ar->ary_array);
119 return astore(ar,++(ar->ary_fill),val);
128 if (ar->ary_fill < 0)
130 retval = ar->ary_array[ar->ary_fill];
131 ar->ary_array[ar->ary_fill--] = Nullstr;
140 register STR **sstr,**dstr;
144 astore(ar,ar->ary_fill+num,(STR*)0); /* maybe extend array */
145 dstr = ar->ary_array + ar->ary_fill;
147 for (i = ar->ary_fill; i >= 0; i--) {
150 bzero((char*)(ar->ary_array), num * sizeof(STR*));
159 if (ar->ary_fill < 0)
161 retval = ar->ary_array[0];
162 bcopy((char*)(ar->ary_array+1),(char*)ar->ary_array,
163 ar->ary_fill * sizeof(STR*));
164 ar->ary_array[ar->ary_fill--] = Nullstr;
181 if (fill <= ar->ary_max)
184 astore(ar,fill,Nullstr);
197 if (ar->ary_fill < 0) {
202 dlen = strlen(delim);
203 len = ar->ary_fill * dlen; /* account for delimiters */
204 for (i = ar->ary_fill; i >= 0; i--)
205 len += str_len(ar->ary_array[i]);
206 str_grow(str,len); /* preallocate for efficiency */
207 str_sset(str,ar->ary_array[0]);
208 for (i = 1; i <= ar->ary_fill; i++) {
209 str_ncat(str,delim,dlen);
210 str_scat(str,ar->ary_array[i]);