blob: 654a05c506ea7e2abeab19905d037a10feab6c12 [file] [log] [blame] [edit]
#ifndef IVEC_H
#define IVEC_H
#include <git-compat-util.h>
#define IVEC_INIT(variable) ivec_init(&(variable), sizeof(*(variable).ptr))
#ifndef CBINDGEN
#define DEFINE_IVEC_TYPE(type, suffix) \
struct IVec_##suffix { \
type* ptr; \
size_t length; \
size_t capacity; \
size_t element_size; \
}
DEFINE_IVEC_TYPE(bool, bool);
DEFINE_IVEC_TYPE(uint8_t, u8);
DEFINE_IVEC_TYPE(uint16_t, u16);
DEFINE_IVEC_TYPE(uint32_t, u32);
DEFINE_IVEC_TYPE(uint64_t, u64);
DEFINE_IVEC_TYPE(int8_t, i8);
DEFINE_IVEC_TYPE(int16_t, i16);
DEFINE_IVEC_TYPE(int32_t, i32);
DEFINE_IVEC_TYPE(int64_t, i64);
DEFINE_IVEC_TYPE(float, f32);
DEFINE_IVEC_TYPE(double, f64);
DEFINE_IVEC_TYPE(size_t, usize);
DEFINE_IVEC_TYPE(ssize_t, isize);
#endif
void ivec_init(void *self_, size_t element_size);
void ivec_zero(void *self_, size_t capacity);
void ivec_reserve_exact(void *self_, size_t additional);
void ivec_reserve(void *self_, size_t additional);
void ivec_shrink_to_fit(void *self_);
void ivec_push(void *self_, const void *value);
void ivec_free(void *self_);
void ivec_move(void *src, void *dst);
#endif /* IVEC_H */