Files
PixelDefense/engine/breeze/utils/array.h
2023-11-15 18:32:43 +01:00

55 lines
2.0 KiB
C

#ifndef BREEZE_ARRAY_H
#define BREEZE_ARRAY_H
#include "../defines.h"
void *_bzArrayNew(i32 startCapacity, i32 stride);
void _bzArrayFree(void *arr);
void _bzArrayClear(void *arr);
i32 _bzArraySize(void *arr);
i32 _bzArrayCapacity(void *arr);
void *_bzArrayResize(void **arr, i32 newSize);
void *_bzArrayEnsureCapacity(void **arr, i32 capacity);
i32 _bzArrayGet(void *arr, i32 idx);
void _bzArrayDelN(void *arr, i32 idx, i32 n);
i32 _bzArrayPush(void *arr);
i32 _bzArrayIns(void *arr, i32 idx);
i32 _bzArraySet(void *arr, i32 idx);
i32 _bzArrayPop(void *arr);
#define bzArrayNew(T, n) (T*) _bzArrayNew(n, sizeof(T))
#define bzArrayFree(arr) do { \
_bzArrayFree(arr); \
arr = NULL; \
} while(0)
#define bzArrayClear(arr) _bzArrayClear(arr)
#define bzArraySize(arr) _bzArraySize(arr)
#define bzArrayCapacity(arr) _bzArrayCapacity(arr)
#define bzArrayResize(arr, size) _bzArrayResize((void **) &arr, size)
#define bzArrayEnsureCapacity(arr, capacity) _bzArrayEnsureCapacity((void **) &arr, capacity)
#define bzArrayGet(arr, idx) (arr)[_bzArrayGet(arr, idx)]
#define bzArrayDel(arr, idx) _bzArrayDelN(arr, idx, 1)
#define bzArrayDelN(arr, idx, n) _bzArrayDelN(arr, idx, n)
#define bzArrayPush(arr, e) \
do { \
(arr) = bzArrayEnsureCapacity(arr, bzArraySize(arr) + 1); \
(arr)[_bzArrayPush(arr)] = (e); \
} while (0)
#define bzArrayIns(arr, idx, e) \
do { \
(arr) = bzArrayEnsureCapacity(arr, bzArraySize(arr) + 1); \
(arr)[_bzArrayIns(arr, idx)] = (e); \
} while (0)
#define bzArraySet(arr, idx, e) (arr)[_bzArraySet(arr, idx)] = e
#define bzArrayPop(arr) (arr)[_bzArrayPop(arr)]
#endif //BREEZE_ARRAY_H