32#ifndef ZYCORE_VECTOR_H
33#define ZYCORE_VECTOR_H
53#define ZYAN_VECTOR_MIN_CAPACITY 1
58#define ZYAN_VECTOR_DEFAULT_GROWTH_FACTOR 2
63#define ZYAN_VECTOR_DEFAULT_SHRINK_THRESHOLD 4
122#define ZYAN_VECTOR_INITIALIZER \
150#define ZYAN_VECTOR_GET(type, vector, index) \
151 (*reinterpret_cast<const type*>(ZyanVectorGet(vector, index)))
153#define ZYAN_VECTOR_GET(type, vector, index) \
154 (*(const type*)ZyanVectorGet(vector, index))
165#define ZYAN_VECTOR_FOREACH(type, vector, item_name, body) \
167 const ZyanUSize ZYAN_MACRO_CONCAT_EXPAND(size_d50d3303, item_name) = (vector)->size; \
168 for (ZyanUSize ZYAN_MACRO_CONCAT_EXPAND(i_bfd62679, item_name) = 0; \
169 ZYAN_MACRO_CONCAT_EXPAND(i_bfd62679, item_name) < \
170 ZYAN_MACRO_CONCAT_EXPAND(size_d50d3303, item_name); \
171 ++ZYAN_MACRO_CONCAT_EXPAND(i_bfd62679, item_name)) \
173 const type item_name = ZYAN_VECTOR_GET(type, vector, \
174 ZYAN_MACRO_CONCAT_EXPAND(i_bfd62679, item_name)); \
187#define ZYAN_VECTOR_FOREACH_MUTABLE(type, vector, item_name, body) \
189 const ZyanUSize ZYAN_MACRO_CONCAT_EXPAND(size_d50d3303, item_name) = (vector)->size; \
190 for (ZyanUSize ZYAN_MACRO_CONCAT_EXPAND(i_bfd62679, item_name) = 0; \
191 ZYAN_MACRO_CONCAT_EXPAND(i_bfd62679, item_name) < \
192 ZYAN_MACRO_CONCAT_EXPAND(size_d50d3303, item_name); \
193 ++ZYAN_MACRO_CONCAT_EXPAND(i_bfd62679, item_name)) \
195 type* const item_name = ZyanVectorGetMutable(vector, \
196 ZYAN_MACRO_CONCAT_EXPAND(i_bfd62679, item_name)); \
256 ZyanU8 growth_factor, ZyanU8 shrink_threshold);
309 const ZyanVector* source, ZyanUSize capacity);
335 ZyanUSize capacity,
ZyanAllocator* allocator, ZyanU8 growth_factor, ZyanU8 shrink_threshold);
354 const ZyanVector* source,
void* buffer, ZyanUSize capacity);
460 const void* element);
473 const void* elements, ZyanUSize count);
519 ZyanUSize index_second);
643 ZyanUSize* found_index,
ZyanComparison comparison, ZyanUSize index, ZyanUSize count);
669 const void* initializer);
ZyanI32(* ZyanComparison)(const void *left, const void *right)
Definition Comparison.h:68
ZyanBool(* ZyanEqualityComparison)(const void *left, const void *right)
Definition Comparison.h:55
#define ZYAN_REQUIRES_LIBC
Definition Defines.h:366
#define ZYCORE_EXPORT
Definition Defines.h:235
void(* ZyanMemberProcedure)(void *object)
Definition Object.h:51
ZyanStatus(* ZyanMemberFunction)(void *object)
Definition Object.h:67
ZyanU32 ZyanStatus
Definition Status.h:48
ZYCORE_EXPORT ZyanStatus ZyanVectorDeleteRange(ZyanVector *vector, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanVectorEmplace(ZyanVector *vector, void **element, ZyanMemberFunction constructor)
ZYCORE_EXPORT ZyanStatus ZyanVectorDuplicateEx(ZyanVector *destination, const ZyanVector *source, ZyanUSize capacity, ZyanAllocator *allocator, ZyanU8 growth_factor, ZyanU8 shrink_threshold)
ZYCORE_EXPORT ZyanStatus ZyanVectorInitEx(ZyanVector *vector, ZyanUSize element_size, ZyanUSize capacity, ZyanMemberProcedure destructor, ZyanAllocator *allocator, ZyanU8 growth_factor, ZyanU8 shrink_threshold)
ZYCORE_EXPORT ZyanStatus ZyanVectorSwapElements(ZyanVector *vector, ZyanUSize index_first, ZyanUSize index_second)
ZYCORE_EXPORT ZyanStatus ZyanVectorPopBack(ZyanVector *vector)
ZYCORE_EXPORT ZyanStatus ZyanVectorGetPointerMutable(const ZyanVector *vector, ZyanUSize index, void **value)
ZYCORE_EXPORT const void * ZyanVectorGet(const ZyanVector *vector, ZyanUSize index)
ZYCORE_EXPORT ZyanStatus ZyanVectorInsertRange(ZyanVector *vector, ZyanUSize index, const void *elements, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanVectorSet(ZyanVector *vector, ZyanUSize index, const void *value)
ZYCORE_EXPORT ZyanStatus ZyanVectorGetPointer(const ZyanVector *vector, ZyanUSize index, const void **value)
ZYCORE_EXPORT ZyanStatus ZyanVectorFind(const ZyanVector *vector, const void *element, ZyanISize *found_index, ZyanEqualityComparison comparison)
ZYCORE_EXPORT ZyanStatus ZyanVectorGetCapacity(const ZyanVector *vector, ZyanUSize *capacity)
ZYCORE_EXPORT ZyanStatus ZyanVectorResize(ZyanVector *vector, ZyanUSize size)
ZYCORE_EXPORT void * ZyanVectorGetMutable(const ZyanVector *vector, ZyanUSize index)
ZYCORE_EXPORT ZyanStatus ZyanVectorPushBack(ZyanVector *vector, const void *element)
ZYCORE_EXPORT ZyanStatus ZyanVectorInitCustomBuffer(ZyanVector *vector, ZyanUSize element_size, void *buffer, ZyanUSize capacity, ZyanMemberProcedure destructor)
ZYCORE_EXPORT ZyanStatus ZyanVectorFindEx(const ZyanVector *vector, const void *element, ZyanISize *found_index, ZyanEqualityComparison comparison, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanVectorBinarySearch(const ZyanVector *vector, const void *element, ZyanUSize *found_index, ZyanComparison comparison)
ZYCORE_EXPORT ZyanStatus ZyanVectorBinarySearchEx(const ZyanVector *vector, const void *element, ZyanUSize *found_index, ZyanComparison comparison, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanVectorInsert(ZyanVector *vector, ZyanUSize index, const void *element)
ZYCORE_EXPORT ZyanStatus ZyanVectorDestroy(ZyanVector *vector)
ZYCORE_EXPORT ZYAN_REQUIRES_LIBC ZyanStatus ZyanVectorDuplicate(ZyanVector *destination, const ZyanVector *source, ZyanUSize capacity)
ZYCORE_EXPORT ZYAN_REQUIRES_LIBC ZyanStatus ZyanVectorInit(ZyanVector *vector, ZyanUSize element_size, ZyanUSize capacity, ZyanMemberProcedure destructor)
ZYCORE_EXPORT ZyanStatus ZyanVectorEmplaceEx(ZyanVector *vector, ZyanUSize index, void **element, ZyanMemberFunction constructor)
ZYCORE_EXPORT ZyanStatus ZyanVectorReserve(ZyanVector *vector, ZyanUSize capacity)
ZYCORE_EXPORT ZyanStatus ZyanVectorDuplicateCustomBuffer(ZyanVector *destination, const ZyanVector *source, void *buffer, ZyanUSize capacity)
ZYCORE_EXPORT ZyanStatus ZyanVectorClear(ZyanVector *vector)
ZYCORE_EXPORT ZyanStatus ZyanVectorShrinkToFit(ZyanVector *vector)
struct ZyanVector_ ZyanVector
ZYCORE_EXPORT ZyanStatus ZyanVectorDelete(ZyanVector *vector, ZyanUSize index)
ZYCORE_EXPORT ZyanStatus ZyanVectorResizeEx(ZyanVector *vector, ZyanUSize size, const void *initializer)
ZYCORE_EXPORT ZyanStatus ZyanVectorGetSize(const ZyanVector *vector, ZyanUSize *size)
Definition Allocator.h:89
ZyanUSize size
Definition Vector.h:92
ZyanU8 shrink_threshold
Definition Vector.h:88
ZyanUSize element_size
Definition Vector.h:100
ZyanUSize capacity
Definition Vector.h:96
void * data
Definition Vector.h:108
ZyanMemberProcedure destructor
Definition Vector.h:104
ZyanAllocator * allocator
Definition Vector.h:80
ZyanU8 growth_factor
Definition Vector.h:84