Derive-C
Loading...
Searching...
No Matches
basic.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <derive-c/utils/for.h>
#include <derive-c/alloc/std.h>
#include <derive-c/core/prelude.h>
#include <derive-c/container/arena/contiguous/template.h>

Go to the source code of this file.

Data Structures

struct  foo

Macros

#define INDEX_BITS   32
#define VALUE   uint32_t
#define NAME   ints
#define INDEX_BITS   8
#define VALUE   struct foo
#define VALUE_DELETE   my_foo_delete
#define VALUE_DEBUG   foo_debug
#define NAME   foo_arena

Functions

void int_example ()
void my_foo_delete (struct foo *self)
void foo_debug (struct foo const *self, dc_debug_fmt fmt, FILE *stream)
int * new_owned_int (int value)
void foo_example ()
int main ()

Macro Definition Documentation

◆ INDEX_BITS [1/2]

#define INDEX_BITS   8

Definition at line 13 of file basic.c.

◆ INDEX_BITS [2/2]

#define INDEX_BITS   32

Definition at line 13 of file basic.c.

◆ NAME [1/2]

#define NAME   foo_arena

Definition at line 15 of file basic.c.

◆ NAME [2/2]

#define NAME   ints

Definition at line 15 of file basic.c.

◆ VALUE [1/2]

#define VALUE   struct foo

Definition at line 14 of file basic.c.

◆ VALUE [2/2]

#define VALUE   uint32_t

Definition at line 14 of file basic.c.

◆ VALUE_DEBUG

#define VALUE_DEBUG   foo_debug

Definition at line 68 of file basic.c.

◆ VALUE_DELETE

#define VALUE_DELETE   my_foo_delete

Definition at line 67 of file basic.c.

Function Documentation

◆ foo_debug()

void foo_debug ( struct foo const * self,
dc_debug_fmt fmt,
FILE * stream )
Examples
container/arena/basic.c.

Definition at line 53 of file basic.c.

53 {
54 (void)fmt;
55 fprintf(stream, "foo@%p { x: %d, y: \"%s\", owned_data: @%p { %d }, }", self, self->x, self->y,
56 self->owned_data, *self->owned_data);
57}
static FILE * stream(SELF *self)
Opens a file for.
Definition template.h:107

◆ foo_example()

void foo_example ( )
Examples
container/arena/basic.c.

Definition at line 72 of file basic.c.

72 {
73 foo_arena arena = foo_arena_new_with_capacity_for(12, stdalloc_get());
74 foo_arena_index_t index_a =
75 foo_arena_insert(&arena, (struct foo){.x = 42, .y = "A", .owned_data = new_owned_int(3)});
76 foo_arena_index_t index_b =
77 foo_arena_insert(&arena, (struct foo){.x = 41, .y = "B", .owned_data = new_owned_int(5)});
78
79 DC_ASSERT(foo_arena_size(&arena) == 2);
80 DC_ASSERT(foo_arena_full(&arena) == false);
81 DC_ASSERT(foo_arena_read(&arena, index_a)->x == 42);
82 DC_ASSERT(foo_arena_read(&arena, index_b)->x == 41);
83
84 foo_arena_write(&arena, index_b)->x = 100;
85 DC_ASSERT(foo_arena_read(&arena, index_b)->x == 100);
86
87 foo_arena_debug(&arena, dc_debug_fmt_new(), stdout);
88
89 // we remove the entry, importantly - we now own this data
90 struct foo entry_a = foo_arena_remove(&arena, index_a);
91
92 // entry_b was deleted
93 foo_arena_delete(&arena);
94
95 // entry a has not yet been deleted, so we can still access and then delete it
96 DC_ASSERT(entry_a.x == 42);
97
98 my_foo_delete(&entry_a);
99}
int * new_owned_int(int value)
Definition basic.c:59
void my_foo_delete(struct foo *self)
Definition basic.c:51
static dc_debug_fmt dc_debug_fmt_new()
Definition fmt.h:14
#define DC_ASSERT(expr,...)
Definition panic.h:36
Definition basic.c:45
int x
Definition basic.c:46

◆ int_example()

void int_example ( )
Examples
container/arena/basic.c.

Definition at line 18 of file basic.c.

18 {
19 ints arena = ints_new_with_capacity_for(12, stdalloc_get());
20 ints_insert(&arena, 23);
21 ints_insert(&arena, 42);
22 ints_insert(&arena, 1000);
23 ints_insert(&arena, 1001);
24
25 DC_ASSERT(ints_size(&arena) == 4);
26 {
27 FOR(ints, &arena, iter, entry) {
28 printf("entry for %d at %d\n", *entry.value, entry.index.index);
29 }
30 }
31
32 {
33 FOR(ints, &arena, iter, entry) {
34 printf("incrementing for %d = %d + 1 at %d\n", *entry.value, *entry.value,
35 entry.index.index);
36 *entry.value += 1;
37 }
38 }
39
40 ints_debug(&arena, dc_debug_fmt_new(), stdout);
41
42 ints_delete(&arena);
43}
#define FOR(TYPE, INSTANCE, ITER, ITEM)
Definition for.h:9

◆ main()

int main ( )

Definition at line 101 of file basic.c.

101 {
102 int_example();
103 foo_example();
104}
void foo_example()
Definition basic.c:72
void int_example()
Definition basic.c:18

◆ my_foo_delete()

void my_foo_delete ( struct foo * self)
Examples
container/arena/basic.c.

Definition at line 51 of file basic.c.

51{ free(self->owned_data); }
static void free(SELF *self, void *ptr)
Definition template.h:56
int * owned_data
Definition basic.c:48

◆ new_owned_int()

int * new_owned_int ( int value)
Examples
container/arena/basic.c.

Definition at line 59 of file basic.c.

59 {
60 int* v = (int*)malloc(sizeof(int));
61 *v = value;
62 return v;
63}
static void * malloc(SELF *self, size_t size)
Definition template.h:23