mirror of
https://github.com/pumpitupdev/pumptools.git
synced 2026-09-26 16:38:29 +03:00
56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "util/array.h"
|
|
#include "util/log.h"
|
|
#include "util/mem.h"
|
|
|
|
void util_array_init(struct util_array* array)
|
|
{
|
|
memset(array, 0, sizeof(*array));
|
|
}
|
|
|
|
void util_array_remove_(size_t itemsz, struct util_array* array, size_t i)
|
|
{
|
|
array->nitems--;
|
|
|
|
memmove(((uint8_t *) array->items) + i * itemsz,
|
|
((uint8_t *) array->items) + (i + 1) * itemsz,
|
|
(array->nitems - i) * itemsz);
|
|
}
|
|
|
|
void* util_array_reserve_(size_t itemsz, struct util_array* array, size_t nitems)
|
|
{
|
|
size_t new_nalloced;
|
|
size_t new_nitems;
|
|
void* result;
|
|
|
|
new_nitems = array->nitems + nitems;
|
|
|
|
if (new_nitems > array->nalloced) {
|
|
new_nalloced = array->nalloced;
|
|
|
|
if (new_nalloced == 0) {
|
|
new_nalloced = 1;
|
|
}
|
|
|
|
while (new_nalloced < new_nitems) {
|
|
new_nalloced *= 2;
|
|
}
|
|
|
|
array->items = util_xrealloc(array->items, new_nalloced * itemsz);
|
|
array->nalloced = new_nalloced;
|
|
}
|
|
|
|
result = ((uint8_t *) array->items) + array->nitems * itemsz;
|
|
array->nitems = new_nitems;
|
|
|
|
return result;
|
|
}
|
|
|
|
void util_array_fini(struct util_array* array)
|
|
{
|
|
free(array->items);
|
|
}
|