-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathslist.h
More file actions
55 lines (38 loc) · 1.39 KB
/
slist.h
File metadata and controls
55 lines (38 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef __SLIST_H__
#define __SLIST_H__
#include <stddef.h>
#include <stdbool.h>
typedef struct slist_ {
struct slist_ *next;
char value[0];
} slist;
#define slist_size(psize) ((psize) + sizeof(slist))
#define slist_nil() NULL
#define slist_value(t, it) ((t)((it)->value))
#define slist_set_value(t,l,v) (*(t*)((l)->value)) = v
slist *slist_cons(slist *item, slist *next);
slist *slist_uncons(slist **pitem);
slist *slist_pool(void *mem, size_t chunk_size, size_t mem_size);
slist* slist_pool_( slist *root
, void *mem
, size_t chunk_size
, size_t mem_size);
slist *slist_alloc( slist **pool
, void *init_ctx
, void (*init)(void *init_ctx, char *item_value));
size_t slist_length(slist *head);
void slist_foreach(slist*, void *cc, void (*)(void*, void*));
void slist_reverse(slist **r);
// keeps order
void slist_filt_destructive( slist **xs
, void *cc
, bool (*filt)(void*, void*)
, void *ccd
, void (*destroy)(void*, slist*)
);
void slist_partition_destructive( slist **xs
, slist **notmatch
, void *cc
, bool (*filt)(void*, void*)
);
#endif