#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <derive-c/core.h>
#include <derive-c/panic.h>
#include <derive-c/self.h>
Go to the source code of this file.
|
#define | T derive_c_parameter_t |
|
#define | T_DELETE derive_c_parameter_t_delete |
|
#define T derive_c_parameter_t |
◆ T_DELETE
#define T_DELETE derive_c_parameter_t_delete |
◆ delete()
static void delete |
( |
SELF * | self | ) |
|
|
static |
Definition at line 161 of file template.h.
161 {
163 for (
size_t i = 0; i < self->
size; i++) {
165 }
167}
#define DEBUG_ASSERT(expr)
◆ empty() [1/2]
static bool empty |
( |
ITER const * | iter | ) |
|
|
static |
Definition at line 192 of file template.h.
192 {
194 return iter->pos >= iter->vec->size;
195}
◆ empty() [2/2]
static bool empty |
( |
ITER_CONST const * | iter | ) |
|
|
static |
Definition at line 229 of file template.h.
229 {
231 return iter->pos >= iter->vec->size;
232}
◆ get_iter()
static ITER get_iter |
( |
SELF * | self | ) |
|
|
static |
Definition at line 197 of file template.h.
197 {
199 return (ITER){
200 .vec = self,
201 .pos = 0,
202 };
203}
◆ get_iter_const()
static ITER_CONST get_iter_const |
( |
SELF const * | self | ) |
|
|
static |
Definition at line 234 of file template.h.
234 {
236 return (ITER_CONST){
237 .vec = self,
238 .pos = 0,
239 };
240}
◆ new()
Definition at line 34 of file template.h.
34 {
36 .size = 0,
37 .capacity = 0,
38 .data = NULL,
39 };
40 return temp;
41}
◆ new_with_capacity()
static SELF new_with_capacity |
( |
size_t | capacity | ) |
|
|
static |
Definition at line 43 of file template.h.
43 {
45 T* data = (
T*)malloc(capacity *
sizeof(
T));
48 .size = 0,
49 .capacity = capacity,
50 .data = data,
51 };
52}
◆ new_with_defaults()
static SELF new_with_defaults |
( |
size_t | size, |
|
|
T | default_value ) |
|
static |
Definition at line 54 of file template.h.
54 {
55 T* data = (
T*)malloc(
size *
sizeof(
T));
56 for (
size_t i = 0; i <
size; i++) {
57 data[i] = default_value;
58 }
63 .data = data,
64 };
65}
static INDEX_TYPE size(SELF const *self)
◆ next() [1/2]
static T * next |
( |
ITER * | iter | ) |
|
|
static |
Definition at line 176 of file template.h.
176 {
178 if (iter->pos < iter->vec->size) {
179 T* item = &iter->vec->data[iter->pos];
180 iter->pos++;
181 return item;
182 } else {
183 return NULL;
184 }
185}
◆ next() [2/2]
static T const * next |
( |
ITER_CONST * | iter | ) |
|
|
static |
Definition at line 213 of file template.h.
213 {
215 if (iter->pos < iter->vec->size) {
216 T const* item = &iter->vec->data[iter->pos];
217 iter->pos++;
218 return item;
219 } else {
220 return NULL;
221 }
222}
◆ pop()
static T pop |
( |
SELF * | self | ) |
|
|
static |
Definition at line 150 of file template.h.
150 {
153 return entry;
154}
static bool try_pop(SELF *self, T *destination)
◆ position() [1/2]
static size_t position |
( |
ITER const * | iter | ) |
|
|
static |
Definition at line 187 of file template.h.
187 {
189 return iter->pos;
190}
◆ position() [2/2]
static size_t position |
( |
ITER_CONST const * | iter | ) |
|
|
static |
Definition at line 224 of file template.h.
224 {
226 return iter->pos;
227}
◆ push()
static T * push |
( |
SELF * | self, |
|
|
T | value ) |
|
static |
Definition at line 109 of file template.h.
109 {
113 size_t new_capacity;
114 if (self->
data == NULL) {
116
117
118
119
120 new_capacity = 8;
121 new_data = (
T*)malloc(new_capacity *
sizeof(
T));
122 } else {
123
124
125
127 new_data = (
T*)realloc(self->
data, new_capacity *
sizeof(
T));
128 }
131 self->
data = new_data;
132 }
134 *entry = value;
136 return entry;
137}
◆ read()
static T const * read |
( |
SELF const * | self, |
|
|
size_t | index ) |
|
static |
Definition at line 88 of file template.h.
88 {
91 return value;
92}
static V const * try_read(SELF const *self, INDEX index)
◆ shallow_clone()
static SELF shallow_clone |
( |
SELF const * | self | ) |
|
|
static |
Definition at line 67 of file template.h.
67 {
69 T* data = (
T*)malloc(self->capacity *
sizeof(
T));
71 memcpy(data, self->data, self->size *
sizeof(
T));
73 .size = self->size,
74 .capacity = self->capacity,
75 .data = data,
76 };
77}
◆ size()
static size_t size |
( |
SELF const * | self | ) |
|
|
static |
Definition at line 156 of file template.h.
156 {
158 return self->size;
159}
◆ try_pop()
static bool try_pop |
( |
SELF * | self, |
|
|
T * | destination ) |
|
static |
Definition at line 139 of file template.h.
139 {
143 *destination = self->
data[self->
size];
144 return true;
145 } else {
146 return false;
147 }
148}
◆ try_read()
static T const * try_read |
( |
SELF const * | self, |
|
|
size_t | index ) |
|
static |
Definition at line 79 of file template.h.
79 {
82 return &self->data[index];
83 } else {
84 return NULL;
85 }
86}
◆ try_write()
static T * try_write |
( |
SELF * | self, |
|
|
size_t | index ) |
|
static |
Definition at line 94 of file template.h.
94 {
97 return &self->
data[index];
98 } else {
99 return NULL;
100 }
101}
◆ write()
static T * write |
( |
SELF * | self, |
|
|
size_t | index ) |
|
static |
Definition at line 103 of file template.h.
103 {
106 return value;
107}
static V * try_write(SELF *self, INDEX index)