50 #define ARRAY_TYPE_NAMED(type, name) \
51 struct array_##name; \
52 typedef struct array_##name { \
55 array_iterator (*begin)(const array_base* arr); \
56 array_iterator (*rbegin)(const array_base* arr); \
59 KINLINE type* array_##name##_it_value(const array_iterator* it) { return &((array_##name*)it->arr)->data[it->pos]; } \
61 KINLINE array_##name array_##name##_create(u32 length) { \
63 _karray_init(length, sizeof(type), &arr.base.length, &arr.base.stride, (void**)&arr.data); \
64 arr.base.p_data = (void*)arr.data; \
65 arr.begin = array_iterator_begin; \
66 arr.rbegin = array_iterator_rbegin; \
70 KINLINE void array_##name##_destroy(array_##name* arr) { \
72 _karray_free(&arr->base.length, &arr->base.stride, (void**)&arr->data); \
81 #define ARRAY_TYPE(type) ARRAY_TYPE_NAMED(type, type)
KAPI void * array_iterator_value(const array_iterator *it)
KAPI array_iterator array_iterator_begin(const array_base *arr)
KAPI void _karray_free(u32 *length, u32 *stride, void **block)
KAPI void array_iterator_prev(array_iterator *it)
KAPI b8 array_iterator_end(const array_iterator *it)
KAPI void _karray_init(u32 length, u32 stride, u32 *out_length, u32 *out_stride, void **block)
KAPI void array_iterator_next(array_iterator *it)
KAPI array_iterator array_iterator_rbegin(const array_base *arr)
#define ARRAY_TYPE(type)
Create an array type of the given type. For advanced types or pointers, use ARRAY_TYPE_NAMED directly...
Definition: array.h:81
struct array_base array_base
struct array_iterator array_iterator
#define ARRAY_TYPE_NAMED(type, name)
Definition: array.h:50
This file contains global type definitions which are used throughout the entire engine and applicatio...
#define KAPI
Import/export qualifier.
Definition: defines.h:205
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
signed char i8
Signed 8-bit integer.
Definition: defines.h:33
_Bool b8
8-bit boolean type
Definition: defines.h:58
float f32
32-bit floating point number
Definition: defines.h:47
double f64
64-bit floating point number
Definition: defines.h:50
signed int i32
Signed 32-bit integer.
Definition: defines.h:39
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:22
signed short i16
Signed 16-bit integer.
Definition: defines.h:36
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:28
signed long long i64
Signed 64-bit integer.
Definition: defines.h:42
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:19
u32 length
Definition: array.h:28
void * p_data
Definition: array.h:30
u32 stride
Definition: array.h:29
const array_base * arr
Definition: array.h:34
void(* next)(struct array_iterator *it)
Definition: array.h:39
b8(* end)(const struct array_iterator *it)
Definition: array.h:37
i32 dir
Definition: array.h:36
void(* prev)(struct array_iterator *it)
Definition: array.h:40
i32 pos
Definition: array.h:35