mirror of
https://github.com/pumpitupdev/pumptools.git
synced 2026-09-27 01:00:28 +03:00
Version 1.08 with public source code release.
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user