Dynarr 0.0.1
C dynamic array
Loading...
Searching...
No Matches
create.c
1#include "dynarr.h"
2#include <stdlib.h>
3#include <stdio.h>
4#include <assert.h>
5
6void default_create(void);
7void explicit_opts_create(void);
8void extended_header(void);
9void cloning(void);
10
11int main(void)
12{
13 default_create();
14 explicit_opts_create();
15 extended_header();
16 cloning();
17
18 return 0;
19}
20
21void default_create(void)
22{
23 dynarr_t *dynarr = dynarr_create(.element_size = sizeof(int));
24
25 if (!dynarr)
26 {
27 perror("dynarr_create");
28 abort();
29 }
30
31 // ...
32
33 dynarr_destroy(dynarr);
34}
35
36void explicit_opts_create(void)
37{
38 dynarr_t *dynarr = dynarr_create
39 (
40 .element_size = sizeof(float),
41 .initial_cap = 100,
42 .grow_factor = 1.5f,
43 .grow_threshold = 0.8,
44 .shrink_threshold = 0.2
45 );
46
47 assert(dynarr && "Buy more RAM!");
48
49 // ...
50
51 dynarr_destroy(dynarr);
52}
53
54void extended_header(void)
55{
56 typedef struct
57 {
58 size_t meta;
59 // ...
60 // ...
61 // ...
62 }
63 ext_t;
64
65 dynarr_t *dynarr = dynarr_create
66 (
67 .ext_header_size = sizeof(ext_t),
68 .element_size = sizeof(long)
69 );
70
71 // ...
72
73 ext_t *header = dynarr_get_ext_header(dynarr);
74 *header = (ext_t) {0};
75
76 // ...
77
78 dynarr_destroy(dynarr);
79}
80
81void cloning(void)
82{
83 dynarr_opts_t opts = {.element_size = sizeof(int)};
84 dynarr_t *dynarr = dynarr_create_(&opts);
85
86 dynarr_t *clone = dynarr_clone(dynarr);
87
88 dynarr_destroy(dynarr);
89 dynarr_destroy(clone);
90}
Describes dynarr public interface.
void * dynarr_get_ext_header(const dynarr_t *const dynarr)
Retrieve a location of extended header.
Definition dynarr.c:121
#define dynarr_create(...)
Dynarr constructor.
Definition dynarr.h:81
dynarr_t * dynarr_clone(const dynarr_t *const dynarr)
Duplicate a dynarr.
Definition dynarr.c:129
dynarr_t * dynarr_create_(const dynarr_opts_t *const opts)
Constructor of the dynamic array.
Definition dynarr.c:89
void dynarr_destroy(dynarr_t *const dynarr)
Deallocates a dynamic array.
Definition dynarr.c:136
Dynarr creating options.
Definition dynarr.h:25
size_t element_size
Definition dynarr.h:28