Files
PixelDefense/engine/breeze/util/array.h

59 lines
2.2 KiB
C

#ifndef BREEZE_ARRAY_H
#define BREEZE_ARRAY_H
#include "../defines.h"
void *_bzArrayCreate(i32 startCapacity, i32 stride);
void _bzArrayDestroy(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);
void _bzArrayDelSwap(void *arr, i32 idx);
i32 _bzArrayPush(void *arr);
i32 _bzArrayIns(void *arr, i32 idx);
i32 _bzArraySet(void *arr, i32 idx);
i32 _bzArrayPop(void *arr);
#define bzArrayCreate(T, n) (T*) _bzArrayCreate(n, sizeof(T))
#define bzArrayDestroy(arr) do { \
_bzArrayDestroy(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 bzArrayDelSwap(arr, idx) _bzArrayDelSwap(arr, idx)
#define bzArrayPush(arr, ...) \
do { \
(arr) = bzArrayEnsureCapacity(arr, bzArraySize(arr) + 1); \
(arr)[_bzArrayPush(arr)] = (__VA_ARGS__); \
} while (0)
#define bzArrayIns(arr, idx, ...) \
do { \
(arr) = bzArrayEnsureCapacity(arr, bzArraySize(arr) + 1); \
(arr)[_bzArrayIns(arr, idx)] = (__VA_ARGS__); \
} while (0)
#define bzArraySet(arr, idx, ...) (arr)[_bzArraySet(arr, idx)] = (__VA_ARGS__)
#define bzArrayPop(arr) (arr)[_bzArrayPop(arr)]
#define bzArrayFor(arr, it) for (i32 it = 0; it < bzArraySize(arr); it++)
#endif //BREEZE_ARRAY_H