CLibs
Loading...
Searching...
No Matches
dynarr.h
Go to the documentation of this file.
1
29
30#ifndef CLIBS_DYNAMIC_ARRAY_H
31#define CLIBS_DYNAMIC_ARRAY_H
32
33#include "../headers/array_printf.h" /* for list_printf */
34#include "../headers/attributes.h" /* Private */
35
36#include <stdbool.h>
37#include <stdint.h>
38
39
40struct dynamic_array; // defined in dynarr.c
41typedef struct dynamic_array List;
42
43
47#define list_init_type( TYPE ) list_init_size( sizeof( TYPE ) )
54Constructor struct dynamic_array *list_init_size( size_t el_size );
62Constructor struct dynamic_array *list_init_cap_size( size_t el_size, size_t init_cap );
63
70int list_copy( const struct dynamic_array *old, struct dynamic_array **new_ls_container );
77Constructor struct dynamic_array *list_copy_of( const struct dynamic_array * );
78
79
85const void *list_see( const struct dynamic_array *ls, size_t idx );
91const void *list_peek( const struct dynamic_array *ls );
92
99#define list_fetch( LIST, IDX, TYPE ) \
100 ( *( ( const TYPE * ) list_see( ( LIST ), ( IDX ) ) ) )
101
107void *list_at( struct dynamic_array *, size_t idx );
113void *list_at_last( struct dynamic_array * );
114
121#define list_access( LIST, IDX, TYPE ) ( *( ( TYPE * ) list_at( ( LIST ), ( IDX ) ) ) )
122
128int list_set_at( struct dynamic_array *, size_t index, const void *data );
129
139int list_extend( struct dynamic_array *ls, const void *array, size_t array_len );
148int list_extend_list( struct dynamic_array *ls, const struct dynamic_array *app );
167int list_append( struct dynamic_array *, const void *datap );
177int list_insert( struct dynamic_array *, size_t index, const void *data );
178
191int list_pop( struct dynamic_array *, void *container );
206int list_remove_fast( struct dynamic_array *, size_t index, void *container );
221int list_remove( struct dynamic_array *, size_t index, void *container );
222
226const void *list_bsearch_p( const struct dynamic_array *,
227 const void *needle,
228 int ( *cmp )( const void *, const void * ) );
232int64_t list_bsearch_i( const struct dynamic_array *,
233 const void *needle,
234 int ( *cmp )( const void *, const void * ) );
235
239const void *list_lsearch_p( const struct dynamic_array *, const void *needle );
243int64_t list_lsearch_i( const struct dynamic_array *, const void *needle );
244
253void list_sort( struct dynamic_array *ls, int ( *cmp )( const void *, const void * ) );
254
259int list_reverse( struct dynamic_array * );
260
266Constructor struct dynamic_array *list_reversed( const struct dynamic_array * );
267
272int list_cmp_size( const void *l1, const void *l2 );
273
278int list_cmp_elsize( const void *l1, const void *l2 );
279
283void list_destroy( struct dynamic_array * );
284
288int list_clear( struct dynamic_array *ls );
289
290
291/* ––––––––––––––––––––––––––––––– PRINTERS ––––––––––––––––––––––––––––––– */
292
294#define list_printf_sde( LIST, ITEM_TYPE, FORMAT, START_STR, DELIM, END_STR ) \
295 array_printf_sde( list_items( LIST ), \
296 list_size( LIST ), \
297 ITEM_TYPE, \
298 FORMAT, \
299 START_STR, \
300 DELIM, \
301 END_STR )
302
304#define list_printf_d( LIST, ITEM_TYPE, FORMAT, DELIM ) \
305 array_printf_d( list_items( LIST ), list_size( LIST ), ITEM_TYPE, FORMAT, DELIM )
306
308#define list_printf( LIST, ITEM_TYPE, FORMAT ) \
309 array_printf( list_items( LIST ), list_size( LIST ), ITEM_TYPE, FORMAT )
310
311
313#define list_sprintf_d( STRING, LIST, TYPE, FMTSTR, DELIM ) \
314 array_sprintf_d( STRING, list_items( LIST ), list_size( LIST ), TYPE, FMTSTR, DELIM )
315
317#define list_sprintf( STRING, LIST, TYPE, FMTSTR ) \
318 array_sprintf( STRING, list_items( LIST ), list_size( LIST ), TYPE, FMTSTR )
319
320
321/* ––––– GETTERS ––––– */
322
324bool list_is_empty( const struct dynamic_array * );
326size_t list_size( const struct dynamic_array * );
328size_t list_el_size( const struct dynamic_array * );
329
335const void *list_items( const struct dynamic_array * );
341UseResult void *list_items_copy( const struct dynamic_array * );
342
343
344#endif //CLIBS_DYNAMIC_ARRAY_H
Function and variable attributes.
#define UseResult
Function's return value must be used.
Definition attributes.h:52
#define Constructor
Definition attributes.h:101
Constructor struct dynamic_array * list_reversed(const struct dynamic_array *)
struct dynamic_array List
Definition dynarr.h:41
int list_copy(const struct dynamic_array *old, struct dynamic_array **new_ls_container)
int list_reverse(struct dynamic_array *)
int list_cmp_size(const void *l1, const void *l2)
void * list_at_last(struct dynamic_array *)
Constructor struct dynamic_array * list_init_cap_size(size_t el_size, size_t init_cap)
int list_append(struct dynamic_array *, const void *datap)
int list_clear(struct dynamic_array *ls)
const void * list_see(const struct dynamic_array *ls, size_t idx)
size_t list_size(const struct dynamic_array *)
Returns number of elements in the list.
void list_destroy(struct dynamic_array *)
const void * list_lsearch_p(const struct dynamic_array *, const void *needle)
void list_sort(struct dynamic_array *ls, int(*cmp)(const void *, const void *))
const void * list_bsearch_p(const struct dynamic_array *, const void *needle, int(*cmp)(const void *, const void *))
const void * list_peek(const struct dynamic_array *ls)
int list_extend_list(struct dynamic_array *ls, const struct dynamic_array *app)
size_t list_el_size(const struct dynamic_array *)
Returns sizeof elements (e.g. if list element type is char, returns 1)
Constructor struct dynamic_array * list_init_size(size_t el_size)
int list_extend(struct dynamic_array *ls, const void *array, size_t array_len)
Constructor struct dynamic_array * list_copy_of(const struct dynamic_array *)
void * list_at(struct dynamic_array *, size_t idx)
int list_set_at(struct dynamic_array *, size_t index, const void *data)
int list_cmp_elsize(const void *l1, const void *l2)
int list_remove_fast(struct dynamic_array *, size_t index, void *container)
UseResult void * list_items_copy(const struct dynamic_array *)
int64_t list_lsearch_i(const struct dynamic_array *, const void *needle)
const void * list_items(const struct dynamic_array *)
int list_insert(struct dynamic_array *, size_t index, const void *data)
int list_remove(struct dynamic_array *, size_t index, void *container)
int64_t list_bsearch_i(const struct dynamic_array *, const void *needle, int(*cmp)(const void *, const void *))
int list_pop(struct dynamic_array *, void *container)
bool list_is_empty(const struct dynamic_array *)
Returns true if list is empty.