gwion-util
utilities for the Gwion project
Loading...
Searching...
No Matches
m_vector.h
Go to the documentation of this file.
1#pragma once
2
3typedef struct M_Vector_ {
6#define ARRAY_OFFSET SZ_INT * 3
7#define ARRAY_PTR(array) (array->ptr + ARRAY_OFFSET)
8#define ARRAY_LEN(array) *(m_uint *)(array->ptr)
9#define ARRAY_SIZE(array) *(m_uint *)(array->ptr + SZ_INT)
10#define ARRAY_CAP(array) *(m_uint *)(array->ptr + SZ_INT * 2)
11
12ANN static inline m_uint m_vector_size(const M_Vector v) {
13 return ARRAY_LEN(v);
14}
15
16ANN static inline void m_vector_get(const M_Vector v, const m_uint i, void *c) {
17 const m_uint size = ARRAY_SIZE(v);
18 memcpy(c, ARRAY_PTR(v) + i * size, size);
19}
20
21ANN static inline m_bit *m_vector_addr(const M_Vector v, const m_uint i) {
22 return &*(m_bit *)(ARRAY_PTR(v) + i * ARRAY_SIZE(v));
23}
24
25void m_vector_init(const M_Vector array, const m_uint size, const m_uint len);
26
27ANN static inline M_Vector new_m_vector(MemPool p, const m_uint size,
28 const m_uint len) {
29 const M_Vector array = (M_Vector)mp_calloc(p, M_Vector);
30 m_vector_init(array, size, len);
31 return array;
32}
33
34ANN static inline void m_vector_release(M_Vector a) { xfree(a->ptr); }
35
36ANN static inline void free_m_vector(MemPool p, M_Vector a) {
38 mp_free(p, M_Vector, a);
39}
40
41ANN void m_vector_set(const M_Vector, const m_uint, const void *);
42ANN void m_vector_add(const M_Vector, const void *);
43ANN void m_vector_rem(const M_Vector, const m_uint);
44ANN void m_vector_insert(const M_Vector v, m_uint index, const void *data);
45ANN void m_vector_add_front(const M_Vector v, const void *data);
#define ANN
Definition defs.h:18
uintptr_t m_uint
Definition gwcommon.h:12
unsigned char m_bit
Definition gwcommon.h:13
ANN void m_vector_add_front(const M_Vector v, const void *data)
Definition m_vector.c:24
ANN void m_vector_set(const M_Vector, const m_uint, const void *)
Definition m_vector.c:31
#define ARRAY_LEN(array)
Definition m_vector.h:8
static ANN m_uint m_vector_size(const M_Vector v)
Definition m_vector.h:12
static ANN M_Vector new_m_vector(MemPool p, const m_uint size, const m_uint len)
Definition m_vector.h:27
#define ARRAY_SIZE(array)
Definition m_vector.h:9
ANN void m_vector_insert(const M_Vector v, m_uint index, const void *data)
Definition m_vector.c:45
void m_vector_init(const M_Vector array, const m_uint size, const m_uint len)
Definition m_vector.c:8
struct M_Vector_ * M_Vector
ANN void m_vector_rem(const M_Vector, const m_uint)
Definition m_vector.c:36
ANN void m_vector_add(const M_Vector, const void *)
Definition m_vector.c:18
static ANN void m_vector_get(const M_Vector v, const m_uint i, void *c)
Definition m_vector.h:16
static ANN void free_m_vector(MemPool p, M_Vector a)
Definition m_vector.h:36
#define ARRAY_PTR(array)
Definition m_vector.h:7
static ANN void m_vector_release(M_Vector a)
Definition m_vector.h:34
static ANN m_bit * m_vector_addr(const M_Vector v, const m_uint i)
Definition m_vector.h:21
#define mp_calloc(p, name)
Definition mpool.h:24
#define mp_free(p, name, a)
Definition mpool.h:25
struct MemPool_ * MemPool
m_bit * ptr
Definition m_vector.h:4
#define xfree(a)
Definition xalloc.h:28