CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
sarray.h File Reference

Dynamic arrays with type-safe generic programming. More...

#include <cx/cx.h>
#include <cx/debug/assert.h>
#include <cx/debug/dbgtypes.h>
#include <cx/utils/macros/unused.h>

Go to the source code of this file.

Macros

#define saDeclareType(name, typ)
 
#define saDeclare(name)   saDeclareType(name, name)
 
#define saDeclarePtr(name)   saDeclareType(name, name*)
 
#define saInitNone   { .a = 0 }
 
#define SA_Grow(rate)   (((uint32)SA_GROW_##rate) << 24)
 
#define saSize(ref)   ((ref)._is_sarray ? _saHdr(SAREF(ref))->count : 0)
 
#define saCapacity(ref)   ((ref)._is_sarray ? _saHdr(SAREF(ref))->capacity : 0)
 
#define saElemSize(ref)   ((ref)._is_sarray ? stGetSize(_saHdr(SAREF(ref))->elemtype) : 0)
 
#define saElemType(ref)   ((ref)._is_sarray ? _saHdr(SAREF(ref))->elemtype : 0)
 
#define saValid(ref)   ((ref).a)
 
#define saInit(out, type, capacity, ...)    _saInit(SAHANDLE(out), stFullType(type), capacity, false, opt_flags(__VA_ARGS__))
 
#define saTryInit(out, type, capacity, ...)    _saInit(SAHANDLE(out), stFullType(type), capacity, true, opt_flags(__VA_ARGS__))
 
#define saDestroy(handle)   _saDestroy(SAHANDLE(handle))
 
#define saReserve(handle, capacity)   _saReserve(SAHANDLE(handle), capacity, true)
 
#define saShrink(handle, capacity)   _saShrink(SAHANDLE(handle), capacity)
 
#define saSetSize(handle, size)   _saSetSize(SAHANDLE(handle), size)
 
#define saClear(handle)   _saClear(SAHANDLE(handle))
 
#define saPush(handle, type, elem, ...)    _saPush(SAHANDLE(handle), stCheckedArg(type, elem), opt_flags(__VA_ARGS__))
 
#define saPushC(handle, type, elem, ...)
 
#define saPopPtr(handle)   _saPopPtr(SAHANDLE(handle), -1)
 
#define saPopPtrI(handle, idx)   _saPopPtr(SAHANDLE(handle), idx)
 
#define saFind(ref, type, elem, ...)    _saFindChecked(SAREF(ref), stCheckedArg(type, elem), opt_flags(__VA_ARGS__))
 
#define saFindRemove(handle, type, elem, ...)    _saFindRemoveChecked(SAHANDLE(handle), stCheckedArg(type, elem), opt_flags(__VA_ARGS__))
 
#define saInsert(handle, idx, type, elem)    _saInsertChecked(SAHANDLE(handle), idx, stCheckedArg(type, elem))
 
#define saExtract(handle, idx, type, elem_copy_out, ...)
 
#define saRemove(handle, idx, ...)    _saExtractChecked(SAHANDLE(handle), idx, stType(none), NULL, opt_flags(__VA_ARGS__))
 
#define saSort(handle, keep)   _saSort(SAHANDLE(handle), keep)
 
#define saSlice(out, src, start, end)   _saSlice(SAHANDLE(out), SAREF(src), start, end)
 
#define saClone(out, src)   _saSlice(SAHANDLE(out), SAREF(src), 0, 0)
 
#define saMerge(out, ...)
 
#define saMergeF(out, flags, ...)
 

Enumerations

enum  SARRAY_CREATE_FLAGS_ENUM { SA_Ref = 0x0010 , SA_Sorted = 0x0020 , SA_AutoShrink = 0x0040 , SAINT_Extended = 0x8000 }
 Creation flags for sarray initialization. More...
 
enum  SARRAY_FUNC_FLAGS_ENUM { SA_Unique = 0x00010000 , SA_Fast = 0x00020000 , SA_Inexact = 0x00100000 , SAINT_Consume = 0x10000000 }
 Operation flags for sarray functions. More...
 

Detailed Description

Dynamic arrays with type-safe generic programming.

SArray (Sorted Array) provides dynamic arrays with runtime type system integration, optional sorting, and copy-on-write semantics for efficient memory management.

Definition in file sarray.h.