macros
This commit is contained in:
30
common.h
Normal file
30
common.h
Normal file
@@ -0,0 +1,30 @@
|
||||
// common.h
|
||||
#ifndef _ZIG1_COMMON_H__
|
||||
#define _ZIG1_COMMON_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define SLICE_INIT(Type, initial_cap) ({ \
|
||||
Type* arr = calloc(initial_cap, sizeof(Type)); \
|
||||
if (!arr) \
|
||||
exit(1); \
|
||||
(__typeof__(Type*)) { arr }; \
|
||||
})
|
||||
|
||||
#define SLICE_RESIZE(slice, Type, new_cap) ({ \
|
||||
uint32_t cap = (new_cap); \
|
||||
Type* new_arr = realloc((slice)->arr, cap * sizeof(Type)); \
|
||||
if (!new_arr) \
|
||||
exit(1); \
|
||||
(slice)->arr = new_arr; \
|
||||
(slice)->cap = cap; \
|
||||
})
|
||||
|
||||
#define SLICE_ENSURE_CAPACITY(slice, Type, additional) ({ \
|
||||
if ((slice)->len + (additional) > (slice)->cap) { \
|
||||
SLICE_RESIZE(slice, Type, ((slice)->cap * 2 > (slice)->len + (additional)) ? (slice)->cap * 2 : (slice)->len + (additional)); \
|
||||
} \
|
||||
})
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user