14#error "The contained type must be defined for a vector template"
17} derive_c_parameter_t;
18#define T derive_c_parameter_t
19static void derive_c_parameter_t_delete(derive_c_parameter_t*) {}
20#define T_DELETE derive_c_parameter_t_delete
24#define T_DELETE(value)
45 T* data = (
T*)malloc(capacity *
sizeof(
T));
55 T* data = (
T*)malloc(
size *
sizeof(
T));
56 for (
size_t i = 0; i <
size; i++) {
57 data[i] = default_value;
69 T* data = (
T*)malloc(self->capacity *
sizeof(
T));
71 memcpy(data, self->data, self->size *
sizeof(
T));
74 .capacity = self->capacity,
82 return &self->data[index];
97 return &self->data[index];
111 if (self->size == self->capacity) {
114 if (self->data == NULL) {
121 new_data = (
T*)malloc(new_capacity *
sizeof(
T));
126 new_capacity = self->capacity * 2;
127 new_data = (
T*)realloc(self->data, new_capacity *
sizeof(
T));
130 self->capacity = new_capacity;
131 self->data = new_data;
133 T* entry = &self->data[self->size];
141 if (
LIKELY(self->size > 0)) {
143 *destination = self->data[self->size];
163 for (
size_t i = 0; i < self->size; i++) {
169#define ITER NAME(SELF, iter)
178 if (iter->pos < iter->vec->size) {
179 T* item = &iter->vec->data[iter->pos];
194 return iter->pos >= iter->vec->size;
206#define ITER_CONST NAME(SELF, iter_const)
213static T const*
NAME(ITER_CONST,
next)(ITER_CONST* iter) {
215 if (iter->pos < iter->vec->size) {
216 T const* item = &iter->vec->data[iter->pos];
229static bool NAME(ITER_CONST,
empty)(ITER_CONST
const* iter) {
231 return iter->pos >= iter->vec->size;
static ITER_CONST get_iter_const(SELF const *self)
static bool empty(ITER const *iter)
static ITER get_iter(SELF *self)
static IV_PAIR next(ITER *iter)
static INDEX_TYPE size(SELF const *self)
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)
#define DEBUG_ASSERT(expr)
static bool try_pop(SELF *self, T *destination)
static T * push(SELF *self, T value)
gdb_marker derive_c_vector
static SELF new_with_capacity(size_t capacity)
static SELF new_with_defaults(size_t size, T default_value)