tlibc/include/collections/Array.h
2025-07-19 04:41:07 +03:00

33 lines
1.0 KiB
C
Executable File

#pragma once
#include "../std.h"
typedef struct Array {
void* data;
u32 size;
} Array;
/// creates Array from a const array
#define ARRAY(T, A...) Array_construct_size(((T[])A), sizeof((T[])A))
#define Array_construct(DATA, T, COUNT) Array_construct_size(DATA, (COUNT) * sizeof(T))
#define Array_construct_size(DATA, LEN) ((Array){ .data = (DATA), .size = (LEN) })
#define Array_alloc(T, COUNT) Array_alloc_size((COUNT) * sizeof(T))
static inline Array Array_alloc_size(u32 size){
return Array_construct_size(malloc(size), size);
}
#define Array_realloc(AR, T, COUNT) Array_realloc_size(AR, (COUNT) * sizeof(T))
static inline void Array_realloc_size(Array* ar, u32 new_size){
ar->data = realloc(ar->data, new_size);
ar->size = new_size;
}
#define Array_len(AR, T) ((AR)->size / sizeof(T))
#define Array_memset(A, VAL) memset((A)->data, VAL, (A)->size)
#define str_castTo_Array(S) Array_construct_size((S).data, (S).size)
#define Array_castTo_str(S, IS_ZERO_TERMINATED) str_construct((S).data, (S).size, IS_ZERO_TERMINATED)