Veritable Lasagna
An Allocator & Data Structure Library for C.
Loading...
Searching...
No Matches
vl_set.h
Go to the documentation of this file.
1#ifndef VL_SET_H
2#define VL_SET_H
3
4#include "vl_linear_pool.h"
5#include "vl_compare.h"
6
7#define VL_SET_ITER_INVALID VL_STRUCTURE_INDEX_MAX
8
15#define VL_SET_FOREACH(set, trackVar) for(vl_set_iter trackVar = vlSetFront(set); (trackVar) != VL_SET_ITER_INVALID; (trackVar) = vlSetNext(set, trackVar))
16
23#define VL_SET_FOREACH_REVERSE(set, trackVar) for(vl_set_iter trackVar = vlSetBack(set); (trackVar) != VL_SET_ITER_INVALID; (trackVar) = vlSetPrev(set, trackVar))
24
25#ifndef vlSetSize
34#define vlSetSize(set) (size_t)((set)->nodePool.totalTaken)
35#endif
36
38
53typedef struct{
54 vl_linearpool nodePool; //node pool which holds all the data in the set.
55 vl_memsize_t elementSize; //size of each set element, in bytes.
56 vl_compare_function comparator; //comparator function pointer. see vl_compare.
57
58 vl_set_iter root; //root iterator. may change upon insert/remove operations.
59} vl_set;
60
70void vlSetInit(vl_set* set, vl_memsize_t elementSize, vl_compare_function compFunc);
71
79void vlSetFree(vl_set* set);
80
91vl_set* vlSetNew(vl_memsize_t elementSize, vl_compare_function compFunc);
92
93
102void vlSetDelete(vl_set* set);
103
111
119
129vl_set_iter vlSetInsert(vl_set* set, const void* elem);
130
143
157
171
180void vlSetRemove(vl_set* set, vl_set_iter iter);
181
190void vlSetRemoveElem(vl_set* set, const void* elem);
191
198void vlSetClear(vl_set* set);
199
215vl_set* vlSetClone(const vl_set* src, vl_set* dest);
216
236int vlSetCopy(vl_set* src, vl_set_iter begin, vl_set_iter end, vl_set* dest);
237
246vl_set_iter vlSetFind(vl_set* set, const void* elem);
247
270vl_set* vlSetUnion(vl_set* a, vl_set* b, vl_set* dest);
271
296
321
322#endif //VL_SET_H
vl_int_t(* vl_compare_function)(const void *dataA, const void *dataB)
Definition vl_compare.h:18
vl_dsidx_t vl_linearpool_idx
Definition vl_linear_pool.h:47
A simple pool allocator, useful for avoiding many smaller heap allocations.
Definition vl_linear_pool.h:27
VL_MEMORY_SIZE_T vl_memsize_t
Definition vl_memory.h:18
VL_MEMORY_T vl_transient
Definition vl_memory.h:85
vl_memsize_t elementSize
Definition vl_set.h:55
vl_linearpool_idx vl_set_iter
Definition vl_set.h:37
vl_set * vlSetDifference(vl_set *a, vl_set *b, vl_set *dest)
Compute the difference between sets A and B, stored in set dest.
Definition vl_set.c:631
vl_set * vlSetNew(vl_memsize_t elementSize, vl_compare_function compFunc)
Definition vl_set.c:186
vl_set_iter vlSetInsert(vl_set *set, const void *elem)
Definition vl_set.c:276
vl_set_iter vlSetPrev(vl_set *set, vl_set_iter iter)
Definition vl_set.c:239
vl_set_iter vlSetNext(vl_set *set, vl_set_iter iter)
Definition vl_set.c:201
void vlSetInit(vl_set *set, vl_memsize_t elementSize, vl_compare_function compFunc)
Definition vl_set.c:175
void vlSetDelete(vl_set *set)
Definition vl_set.c:192
vl_set * vlSetUnion(vl_set *a, vl_set *b, vl_set *dest)
Computes the union between sets A and B, stored in set dest.
Definition vl_set.c:597
void vlSetClear(vl_set *set)
Definition vl_set.c:539
vl_set_iter vlSetBack(vl_set *set)
Definition vl_set.c:56
vl_set_iter vlSetFind(vl_set *set, const void *elem)
Definition vl_set.c:581
vl_set * vlSetClone(const vl_set *src, vl_set *dest)
Clones the specified set to another.
Definition vl_set.c:544
void vlSetRemoveElem(vl_set *set, const void *elem)
Definition vl_set.c:535
vl_set_iter root
Definition vl_set.h:58
vl_transient * vlSetSample(vl_set *set, vl_set_iter iter)
Definition vl_set.c:197
void vlSetRemove(vl_set *set, vl_set_iter iter)
Definition vl_set.c:498
void vlSetFree(vl_set *set)
Definition vl_set.c:182
int vlSetCopy(vl_set *src, vl_set_iter begin, vl_set_iter end, vl_set *dest)
Copies a range of elements from one set to another.
Definition vl_set.c:556
vl_compare_function comparator
Definition vl_set.h:56
vl_set * vlSetIntersection(vl_set *a, vl_set *b, vl_set *dest)
Computes the intersection between sets A and B, stored in set dest.
Definition vl_set.c:613
vl_set_iter vlSetFront(vl_set *set)
Definition vl_set.c:46
vl_linearpool nodePool
Definition vl_set.h:54
An ordered set.
Definition vl_set.h:53