Lines Matching defs:st
144 sk_insert(_STACK *st, void *data, int loc)
148 if (st == NULL)
150 if (st->num_alloc <= st->num + 1) {
151 s = reallocarray(st->data, st->num_alloc, 2 * sizeof(char *));
154 st->data = s;
155 st->num_alloc *= 2;
157 if ((loc >= (int)st->num) || (loc < 0))
158 st->data[st->num] = data;
160 memmove(&(st->data[loc + 1]), &(st->data[loc]),
161 sizeof(char *)*(st->num - loc));
162 st->data[loc] = data;
164 st->num++;
165 st->sorted = 0;
166 return (st->num);
171 sk_delete_ptr(_STACK *st, void *p)
175 for (i = 0; i < st->num; i++)
176 if (st->data[i] == p)
177 return (sk_delete(st, i));
183 sk_delete(_STACK *st, int loc)
187 if (!st || (loc < 0) || (loc >= st->num))
190 ret = st->data[loc];
191 if (loc != st->num - 1) {
192 memmove(&(st->data[loc]), &(st->data[loc + 1]),
193 sizeof(char *)*(st->num - 1 - loc));
195 st->num--;
227 sk_find(_STACK *st, void *data)
232 if (st == NULL)
235 if (st->comp == NULL) {
236 for (i = 0; i < st->num; i++)
237 if (st->data[i] == data)
241 sk_sort(st);
244 r = obj_bsearch_ex(&data, st->data, st->num, sizeof(void *), st->comp);
247 return (int)((char **)r - st->data);
252 sk_push(_STACK *st, void *data)
254 return (sk_insert(st, data, st->num));
259 sk_unshift(_STACK *st, void *data)
261 return (sk_insert(st, data, 0));
266 sk_shift(_STACK *st)
268 if (st == NULL)
270 if (st->num <= 0)
272 return (sk_delete(st, 0));
277 sk_pop(_STACK *st)
279 if (st == NULL)
281 if (st->num <= 0)
283 return (sk_delete(st, st->num - 1));
288 sk_zero(_STACK *st)
290 if (st == NULL)
292 if (st->num <= 0)
294 memset(st->data, 0, sizeof(st->data)*st->num);
295 st->num = 0;
300 sk_pop_free(_STACK *st, void (*func)(void *))
304 if (st == NULL)
306 for (i = 0; i < st->num; i++)
307 if (st->data[i] != NULL)
308 func(st->data[i]);
309 sk_free(st);
314 sk_free(_STACK *st)
316 if (st == NULL)
318 free(st->data);
319 free(st);
324 sk_num(const _STACK *st)
326 if (st == NULL)
328 return st->num;
333 sk_value(const _STACK *st, int i)
335 if (!st || (i < 0) || (i >= st->num))
337 return st->data[i];
342 sk_set(_STACK *st, int i, void *value)
344 if (!st || (i < 0) || (i >= st->num))
346 st->sorted = 0;
347 return (st->data[i] = value);
352 sk_sort(_STACK *st)
354 if (st && !st->sorted) {
357 /* same comment as in sk_find ... previously st->comp was declared
362 comp_func = (int (*)(const void *, const void *))(st->comp);
363 qsort(st->data, st->num, sizeof(char *), comp_func);
364 st->sorted = 1;
370 sk_is_sorted(const _STACK *st)
372 if (st == NULL)
375 if (st->sorted)
379 if (st->comp == NULL)
383 return st->num <= 1;