Kohi Game Engine
array.h File Reference

This files contains an implementation of a static-sized (but dynamically allocated) array. More...

#include "defines.h"

Go to the source code of this file.

Data Structures

struct  array_base
 
struct  array_iterator
 

Macros

#define ARRAY_TYPE_NAMED(type, name)
 
#define ARRAY_TYPE(type)   ARRAY_TYPE_NAMED(type, type)
 Create an array type of the given type. For advanced types or pointers, use ARRAY_TYPE_NAMED directly. More...
 

Typedefs

typedef struct array_base array_base
 
typedef struct array_iterator array_iterator
 

Functions

KAPI void _karray_init (u32 length, u32 stride, u32 *out_length, u32 *out_stride, void **block)
 
KAPI void _karray_free (u32 *length, u32 *stride, void **block)
 
KAPI array_iterator array_iterator_begin (const array_base *arr)
 
KAPI array_iterator array_iterator_rbegin (const array_base *arr)
 
KAPI b8 array_iterator_end (const array_iterator *it)
 
KAPI void * array_iterator_value (const array_iterator *it)
 
KAPI void array_iterator_next (array_iterator *it)
 
KAPI void array_iterator_prev (array_iterator *it)
 
 ARRAY_TYPE (b8)
 
 ARRAY_TYPE (u8)
 
 ARRAY_TYPE (u16)
 
 ARRAY_TYPE (u32)
 
 ARRAY_TYPE (u64)
 
 ARRAY_TYPE (i8)
 
 ARRAY_TYPE (i16)
 
 ARRAY_TYPE (i32)
 
 ARRAY_TYPE (i64)
 
 ARRAY_TYPE (f32)
 
 ARRAY_TYPE (f64)
 
 ARRAY_TYPE_NAMED (const char *, string)
 

Detailed Description

This files contains an implementation of a static-sized (but dynamically allocated) array.

Author
Travis Vroman (travi.nosp@m.s@ko.nosp@m.hieng.nosp@m.ine..nosp@m.com)

Create an array type for a simple type using: ARRAY_TYPE(f64). Create an array type for "advanced" types, such as strings, like this: ARRAY_TYPE_NAMED(const char*, string) Both of these types already exist (see the bottom of this file) but others may be easily created this way.

Version
1.0
Date
2024-08-14

Macro Definition Documentation

◆ ARRAY_TYPE

#define ARRAY_TYPE (   type)    ARRAY_TYPE_NAMED(type, type)

Create an array type of the given type. For advanced types or pointers, use ARRAY_TYPE_NAMED directly.

◆ ARRAY_TYPE_NAMED

#define ARRAY_TYPE_NAMED (   type,
  name 
)
Value:
struct array_##name; \
typedef struct array_##name { \
array_base base; \
type* data; \
array_iterator (*begin)(const array_base* arr); \
array_iterator (*rbegin)(const array_base* arr); \
} array_##name; \
\
KINLINE type* array_##name##_it_value(const array_iterator* it) { return &((array_##name*)it->arr)->data[it->pos]; } \
\
KINLINE array_##name array_##name##_create(u32 length) { \
array_##name arr; \
_karray_init(length, sizeof(type), &arr.base.length, &arr.base.stride, (void**)&arr.data); \
arr.base.p_data = (void*)arr.data; \
arr.begin = array_iterator_begin; \
arr.rbegin = array_iterator_rbegin; \
return arr; \
} \
\
KINLINE void array_##name##_destroy(array_##name* arr) { \
if (arr) { \
_karray_free(&arr->base.length, &arr->base.stride, (void**)&arr->data); \
arr->begin = 0; \
arr->rbegin = 0; \
} \
}
KAPI array_iterator array_iterator_begin(const array_base *arr)
KAPI array_iterator array_iterator_rbegin(const array_base *arr)
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
Definition: array.h:27
Definition: array.h:33
const array_base * arr
Definition: array.h:34
i32 pos
Definition: array.h:35

Typedef Documentation

◆ array_base

typedef struct array_base array_base

◆ array_iterator

Function Documentation

◆ _karray_free()

KAPI void _karray_free ( u32 length,
u32 stride,
void **  block 
)

◆ _karray_init()

KAPI void _karray_init ( u32  length,
u32  stride,
u32 out_length,
u32 out_stride,
void **  block 
)

◆ array_iterator_begin()

KAPI array_iterator array_iterator_begin ( const array_base arr)

◆ array_iterator_end()

KAPI b8 array_iterator_end ( const array_iterator it)

◆ array_iterator_next()

KAPI void array_iterator_next ( array_iterator it)

◆ array_iterator_prev()

KAPI void array_iterator_prev ( array_iterator it)

◆ array_iterator_rbegin()

KAPI array_iterator array_iterator_rbegin ( const array_base arr)

◆ array_iterator_value()

KAPI void* array_iterator_value ( const array_iterator it)

◆ ARRAY_TYPE() [1/11]

ARRAY_TYPE ( b8  )

◆ ARRAY_TYPE() [2/11]

ARRAY_TYPE ( f32  )

◆ ARRAY_TYPE() [3/11]

ARRAY_TYPE ( f64  )

◆ ARRAY_TYPE() [4/11]

ARRAY_TYPE ( i16  )

◆ ARRAY_TYPE() [5/11]

ARRAY_TYPE ( i32  )

◆ ARRAY_TYPE() [6/11]

ARRAY_TYPE ( i64  )

◆ ARRAY_TYPE() [7/11]

ARRAY_TYPE ( i8  )

◆ ARRAY_TYPE() [8/11]

ARRAY_TYPE ( u16  )

◆ ARRAY_TYPE() [9/11]

ARRAY_TYPE ( u32  )

◆ ARRAY_TYPE() [10/11]

ARRAY_TYPE ( u64  )

◆ ARRAY_TYPE() [11/11]

ARRAY_TYPE ( u8  )

◆ ARRAY_TYPE_NAMED()

ARRAY_TYPE_NAMED ( const char *  ,
string   
)