Derive-C
Loading...
Searching...
No Matches
container/vector/dynamic.c

Examples for inserting, iterating, and deleting from vectors.

Examples for inserting, iterating, and deleting from vectors.

#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ITEM int32_t
#define NAME vec_ints
void ints_example() {
vec_ints ints = vec_ints_new_with_capacity(10, stdalloc_get());
const int32_t upto = 100;
for (int32_t i = 0; i < upto; i++) {
vec_ints_push(&ints, i);
}
DC_ASSERT(vec_ints_size(&ints) == upto);
for (int32_t i = 0; i < upto; i++) {
int* value = vec_ints_write(&ints, i);
*value += 1; // Increment each value by 1
}
for (int32_t i = 0; i < upto; i++) {
DC_ASSERT(*vec_ints_read(&ints, i) == i + 1);
}
// Pop the last value
int32_t last_value = vec_ints_pop(&ints);
DC_ASSERT(last_value == upto); // Last value should be 99 + 1
DC_ASSERT(vec_ints_size(&ints) == upto - 1);
vec_ints_debug(&ints, dc_debug_fmt_new(), stdout);
vec_ints_delete(&ints);
}
struct complex_data {
char* description;
size_t score;
};
void complex_data_debug(struct complex_data const* self, dc_debug_fmt fmt, FILE* stream) {
fprintf(stream, "complex_data@%p {\n", self);
dc_debug_fmt_print(fmt, stream, "description: %s,\n", self->description);
dc_debug_fmt_print(fmt, stream, "score: %lu,\n", self->score);
}
void complex_data_delete(struct complex_data* self) { free(self->description); }
#define ITEM struct complex_data
#define ITEM_DELETE complex_data_delete
#define ITEM_DEBUG complex_data_debug
#define NAME vec_complex_data
vec_complex_data vec = vec_complex_data_new_with_capacity(5, stdalloc_get());
size_t entries = 5;
for (size_t i = 0; i < entries; i++) {
struct complex_data item = {.description = strdup("Complex item"), .score = i * 10};
vec_complex_data_push(&vec, item);
}
DC_ASSERT(vec_complex_data_size(&vec) == entries);
struct complex_data* first_item = vec_complex_data_write(&vec, 0);
first_item->score += 5;
DC_ASSERT(vec_complex_data_read(&vec, 0)->score == 5);
struct complex_data popped = vec_complex_data_pop(&vec);
DC_ASSERT(popped.score == 40); // Last item's score should be 40
vec_complex_data_debug(&vec, dc_debug_fmt_new(), stdout);
vec_complex_data_delete(&vec);
}
#define ITEM char
#define NAME char_vec
char_vec vec = char_vec_new(stdalloc_get());
char_vec_push(&vec, 'H');
char_vec_push(&vec, 'e');
char_vec_push(&vec, 'l');
char_vec_push(&vec, 'l');
char_vec_push(&vec, 'o');
char_vec_push(&vec, ' ');
char_vec_push(&vec, 'W');
char_vec_push(&vec, 'o');
char_vec_push(&vec, 'r');
char_vec_push(&vec, 'l');
char_vec_push(&vec, 'd');
DC_ASSERT(char_vec_size(&vec) == 11);
{
// Iterate over the vector and print the items
char_vec_iter_const iter = char_vec_get_iter_const(&vec);
char const* item = NULL;
while (item = char_vec_iter_const_next(&iter), item != NULL) {
printf("%c", *item);
}
printf("\n");
}
{
char_vec_iter_const iter = char_vec_get_iter_const(&vec);
char const* c = NULL;
size_t index = 0;
while ((c = char_vec_iter_const_next(&iter))) {
printf("entry for '%c' at index %zu\n", *c, index);
index++;
}
}
char_vec_delete(&vec);
}
int main() {
}
static void free(SELF *self, void *ptr)
Definition template.h:56
IV_PAIR item
Definition template.h:283
void ints_example()
Definition dynamic.c:18
void complex_data_example()
Definition dynamic.c:68
void iterate_example()
Definition dynamic.c:96
dc_debug_fmt dc_debug_fmt_scope_end(dc_debug_fmt fmt)
Definition fmt.h:39
dc_debug_fmt dc_debug_fmt_scope_begin(dc_debug_fmt fmt)
Definition fmt.h:33
static void dc_debug_fmt_print(dc_debug_fmt fmt, FILE *stream, const char *format,...)
Definition fmt.h:22
static dc_debug_fmt dc_debug_fmt_new()
Definition fmt.h:14
void complex_data_debug(struct complex_data const *self, dc_debug_fmt fmt, FILE *stream)
Definition option.c:24
void complex_data_delete(struct complex_data *self)
Definition option.c:16
#define DC_ASSERT(expr,...)
Definition panic.h:36
int main()
Definition staticbump.c:45
size_t score
Definition dynamic.c:48
char * description
Definition option.c:13
Debug format helpers for debug printin data structures.
Definition fmt.h:10
static FILE * stream(SELF *self)
Opens a file for.
Definition template.h:107