Dynarr 0.0.1
C dynamic array
Loading...
Searching...
No Matches
dynarr.h
Go to the documentation of this file.
1
7#ifndef _DYNARR_H_
8#define _DYNARR_H_
9
10#include <stdbool.h> /* bool, true, false */
11#include <stddef.h> /* size_t */
12#include <sys/types.h> /* ssize_t */
13
14#include "vector.h"
15
19typedef struct vector_t dynarr_t;
20
35
55
59#define DYNARR_DEFAULT_ARGS \
60 VECTOR_DEFAULT_ARGS, \
61 .shrink_threshold = 0.25f, \
62 .grow_threshold = 0.75f, \
63 .grow_factor = 1.5f
64
81#define dynarr_create(...) \
82 dynarr_create_(&(dynarr_opts_t){ \
83 DYNARR_DEFAULT_ARGS, \
84 __VA_ARGS__ \
85 }) \
86
96dynarr_t *dynarr_create_(const dynarr_opts_t *const opts);
97
98
105void dynarr_destroy(dynarr_t *const dynarr);
106
107
115dynarr_t *dynarr_clone(const dynarr_t *const dynarr);
116
117
131void* dynarr_get_ext_header(const dynarr_t *const dynarr);
132
147size_t dynarr_size(const dynarr_t *const dynarr);
148
149
158size_t dynarr_initial_capacity(const dynarr_t *const dynarr);
159
160
167size_t dynarr_capacity(const dynarr_t *const dynarr);
168
186void *dynarr_binary_find(const dynarr_t *const dynarr,
187 const void *const value,
188 const compare_t cmp,
189 void *const param);
190
191
202ssize_t dynarr_binary_find_index(const dynarr_t *const dynarr,
203 const void *const value,
204 const compare_t cmp,
205 void *const param);
206
220void dynarr_clear(dynarr_t *const dynarr);
221
222
231void *dynarr_get(const dynarr_t *const dynarr, const size_t index);
232
233
241void dynarr_set(dynarr_t *const dynarr, const size_t index, const void *value);
242
243
250void dynarr_set_zero(dynarr_t *const dynarr, const size_t index);
251
252
263void *dynarr_first(const dynarr_t *const dynarr);
264
265
276void *dynarr_last(const dynarr_t *const dynarr);
277
278
290dynarr_status_t dynarr_append(dynarr_t **const dynarr, const void *const value);
291
292
304dynarr_status_t dynarr_prepend(dynarr_t **const dynarr, const void *const value);
305
306
318dynarr_status_t dynarr_pop_back(dynarr_t **const dynarr);
319
320
333dynarr_status_t dynarr_pop_front(dynarr_t **const dynarr);
334
335
347dynarr_status_t dynarr_insert(dynarr_t **const dynarr,
348 const size_t index,
349 const void *value);
350
351
364dynarr_status_t dynarr_remove(dynarr_t **const dynarr, const size_t index);
365
366
380dynarr_status_t dynarr_remove_range(dynarr_t **const dynarr,
381 const size_t index,
382 const size_t amount);
383
384
398dynarr_status_t dynarr_remove_if(dynarr_t **const dynarr,
399 const predicate_t predicate,
400 const size_t limit,
401 void *const param);
402
403
417dynarr_t *dynarr_binary_merge(const dynarr_t *const first,
418 const dynarr_t *const second,
419 const compare_t cmp,
420 void *const param);
421
422
434dynarr_status_t dynarr_spread_insert(dynarr_t **const dynarr,
435 const size_t index,
436 const size_t amount,
437 const void *const value);
438
439
452size_t dynarr_binary_find_insert_place(const dynarr_t *const dynarr,
453 const void *const value,
454 const compare_t cmp,
455 void *param);
456
457
473dynarr_status_t dynarr_binary_insert(dynarr_t **const dynarr,
474 const void *const value,
475 const compare_t cmp,
476 void *const param,
477 size_t *const index);
478
479
485dynarr_status_t dynarr_binary_insert_uniq(dynarr_t **const dynarr,
486 const void *const value,
487 const compare_t cmp,
488 void *const param,
489 size_t *const index);
490
491
506dynarr_status_t dynarr_binary_reserve(dynarr_t **const dynarr,
507 const void *const value,
508 const compare_t cmp,
509 void *const param,
510 size_t *const index);
511
512
514int dynarr_foreach(const dynarr_t *const dynarr,
515 const foreach_t func,
516 void *const param);
517
518
520int dynarr_aggregate(const dynarr_t *const dynarr,
521 const aggregate_t func,
522 void *const acc,
523 void *const param);
524
526int dynarr_transform(dynarr_t *const dynarr,
527 const transform_t func,
528 void *const param);
529
534#endif/*_DYNARR_H_*/
dynarr_status_t
Represents operation error codes.
Definition dynarr.h:43
@ DYNARR_GROW_ERROR
Allocation error on grow.
Definition dynarr.h:46
@ DYNARR_SHRINK_ERROR
Success status inherited from VECTOR_ALLOC_ERROR.
Definition dynarr.h:49
@ DYNARR_ALLOC_ERROR
Success status inherited from VECTOR_ALLOC_ERROR.
Definition dynarr.h:45
@ DYNARR_SUCCESS
Success status inherited from VECTOR_SUCCESS.
Definition dynarr.h:44
@ DYNARR_STATUS_LAST
Total number of valid dynarr status codes.
Definition dynarr.h:50
dynarr_status_t dynarr_spread_insert(dynarr_t **const dynarr, const size_t index, const size_t amount, const void *const value)
Insert single value as an element range.
Definition dynarr.c:290
dynarr_t * dynarr_binary_merge(const dynarr_t *const first, const dynarr_t *const second, const compare_t cmp, void *const param)
Non-destructive merge of two sorted dynarrs.
Definition dynarr.c:423
dynarr_status_t dynarr_remove_range(dynarr_t **const dynarr, const size_t index, const size_t amount)
Removes range of elements from a dynarr.
Definition dynarr.c:388
dynarr_status_t dynarr_append(dynarr_t **const dynarr, const void *const value)
Appends an element to the tail of a dynarr.
Definition dynarr.c:239
dynarr_status_t dynarr_binary_reserve(dynarr_t **const dynarr, const void *const value, const compare_t cmp, void *const param, size_t *const index)
Reserve space for an element in sorted dynarr.
Definition dynarr.c:359
int dynarr_foreach(const dynarr_t *const dynarr, const foreach_t func, void *const param)
Definition dynarr.c:506
void dynarr_set(dynarr_t *const dynarr, const size_t index, const void *value)
Sets element at given index to a value.
Definition dynarr.c:179
dynarr_status_t dynarr_pop_back(dynarr_t **const dynarr)
Removes an element from the tail of a dynarr.
Definition dynarr.c:257
dynarr_status_t dynarr_pop_front(dynarr_t **const dynarr)
Removes an element from the head of a dynarr.
Definition dynarr.c:264
dynarr_status_t dynarr_binary_insert_uniq(dynarr_t **const dynarr, const void *const value, const compare_t cmp, void *const param, size_t *const index)
Binary unique insert.
Definition dynarr.c:343
dynarr_status_t dynarr_prepend(dynarr_t **const dynarr, const void *const value)
Prepends an element to the head of a dynarr.
Definition dynarr.c:248
void * dynarr_first(const dynarr_t *const dynarr)
Access first element of a dynarr.
Definition dynarr.c:196
size_t dynarr_binary_find_insert_place(const dynarr_t *const dynarr, const void *const value, const compare_t cmp, void *param)
Binary search for binary insert support.
Definition dynarr.c:310
void * dynarr_last(const dynarr_t *const dynarr)
Access last element if a dynarr.
Definition dynarr.c:204
int dynarr_transform(dynarr_t *const dynarr, const transform_t func, void *const param)
Definition dynarr.c:528
void dynarr_set_zero(dynarr_t *const dynarr, const size_t index)
Sets element at given index to a zero value.
Definition dynarr.c:188
void * dynarr_get(const dynarr_t *const dynarr, const size_t index)
Returns pointer for the element at index.
Definition dynarr.c:171
dynarr_status_t dynarr_remove_if(dynarr_t **const dynarr, const predicate_t predicate, const size_t limit, void *const param)
Removes limit elements that match predicate.
Definition dynarr.c:402
dynarr_status_t dynarr_insert(dynarr_t **const dynarr, const size_t index, const void *value)
Inserts new element into a dynarr.
Definition dynarr.c:271
int dynarr_aggregate(const dynarr_t *const dynarr, const aggregate_t func, void *const acc, void *const param)
Definition dynarr.c:516
dynarr_status_t dynarr_binary_insert(dynarr_t **const dynarr, const void *const value, const compare_t cmp, void *const param, size_t *const index)
Binary insert.
Definition dynarr.c:323
dynarr_status_t dynarr_remove(dynarr_t **const dynarr, const size_t index)
Removes an element from a dynarr.
Definition dynarr.c:381
void dynarr_clear(dynarr_t *const dynarr)
Clean (reset) contents of the dynarr.
Definition dynarr.c:143
void * dynarr_get_ext_header(const dynarr_t *const dynarr)
Retrieve a location of extended header.
Definition dynarr.c:121
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
size_t dynarr_capacity(const dynarr_t *const dynarr)
Access current capacity of the dynarr.
Definition dynarr.c:164
size_t dynarr_initial_capacity(const dynarr_t *const dynarr)
Access initial capacity property.
Definition dynarr.c:157
size_t dynarr_size(const dynarr_t *const dynarr)
Access size property of a dynarr.
Definition dynarr.c:150
ssize_t dynarr_binary_find_index(const dynarr_t *const dynarr, const void *const value, const compare_t cmp, void *const param)
Binary search for the element with matching value.
Definition dynarr.c:226
void * dynarr_binary_find(const dynarr_t *const dynarr, const void *const value, const compare_t cmp, void *const param)
Binary search for the element with matching value.
Definition dynarr.c:213
Dynarr creating options.
Definition dynarr.h:25
float grow_threshold
Fraction of the capacity need to be used to trigger growing.
Definition dynarr.h:31
size_t element_size
Definition dynarr.h:28
alloc_opts_t alloc_opts
Definition dynarr.h:26
float shrink_threshold
Fraction of the capacity in use at which srink will be performed.
Definition dynarr.h:32
size_t initial_cap
Definition dynarr.h:29
size_t ext_header_size
Definition dynarr.h:27
float grow_factor
Multiplier that is applied to dynarr capactity on resize.
Definition dynarr.h:30
VECTOR_SUCCESS
VECTOR_ALLOC_ERROR
VECTOR_STATUS_LAST