19#ifndef __clang_analyzer__
20#error "The contained type must be defined for a vector template"
24} derive_c_parameter_t;
25#define T derive_c_parameter_t
26static void derive_c_parameter_t_delete(derive_c_parameter_t*
UNUSED(t)) {}
27#define T_DELETE derive_c_parameter_t_delete
31#define T_DELETE(value)
66 for (
size_t i = 0; i <
size; i++) {
67 data[i] = default_value;
82 memcpy(data, self->data, self->size *
sizeof(
T));
85 .capacity = self->capacity,
94 return &self->data[index];
108 return &self->data[index];
121 if (self->size == self->capacity) {
124 if (self->data == NULL) {
136 new_capacity = self->capacity * 2;
137 new_data = (
T*)
NAME(
ALLOC,
realloc)(self->alloc, self->data, new_capacity *
sizeof(
T));
140 self->capacity = new_capacity;
141 self->data = new_data;
143 T* entry = &self->data[self->size];
151 if (
LIKELY(self->size > 0)) {
153 *destination = self->data[self->size];
173 for (
size_t i = 0; i < self->size; i++) {
180#define ITER NAME(SELF, iter)
189 if (iter->pos < iter->vec->size) {
190 T* item = &iter->vec->data[iter->pos];
204 return iter->pos >= iter->vec->size;
216#define ITER_CONST NAME(SELF, iter_const)
223static T const*
NAME(ITER_CONST,
next)(ITER_CONST* iter) {
225 if (iter->pos < iter->vec->size) {
226 T const* item = &iter->vec->data[iter->pos];
238static bool NAME(ITER_CONST,
empty)(ITER_CONST
const* iter) {
240 return iter->pos >= iter->vec->size;
#define ALLOC
An allocator that prints to stdout when it allocates or frees memory.
static void free(SELF *self, void *ptr)
static void * realloc(SELF *self, void *ptr, size_t size)
static void * malloc(SELF *self, size_t size)
#define DEBUG_ASSERT(expr)
gdb_marker derive_c_vector
static ITER_CONST get_iter_const(SELF const *self)
static bool empty(ITER const *iter)
static ITER get_iter(SELF *self)
static INDEX_TYPE size(SELF const *self)
static IV_PAIR const * next(ITER *iter)
static V const * try_read(SELF const *self, INDEX index)
static V * write(SELF *self, INDEX index)
static SELF shallow_clone(SELF const *self)
static V * try_write(SELF *self, INDEX index)
static size_t position(ITER const *iter)
static V const * read(SELF const *self, INDEX index)
static bool try_pop(SELF *self, T *destination)
static T * push(SELF *self, T value)
static SELF new_with_capacity(size_t capacity, ALLOC *alloc)
#define ALLOC
A simple vector.
static SELF new_with_defaults(size_t size, T default_value, ALLOC *alloc)