Veritable Lasagna
An Allocator & Data Structure Library for C.
Loading...
Searching...
No Matches
vl_set.h
Go to the documentation of this file.
1
14#ifndef VL_SET_H
15#define VL_SET_H
16
17#include "vl_compare.h"
18#include "vl_memory.h"
19#include "vl_pool.h"
20
21#define VL_SET_ITER_INVALID VL_STRUCTURE_INDEX_MAX
22
30#define VL_SET_FOREACH(set, trackVar) \
31 for (vl_set_iter trackVar = vlSetFront(set); (trackVar) != VL_SET_ITER_INVALID; \
32 (trackVar) = vlSetNext(set, trackVar))
33
41#define VL_SET_FOREACH_REVERSE(set, trackVar) \
42 for (vl_set_iter trackVar = vlSetBack(set); (trackVar) != VL_SET_ITER_INVALID; \
43 (trackVar) = vlSetPrev(set, trackVar))
44
45#ifndef vlSetSize
54#define vlSetSize(set) (size_t)((set)->nodePool.totalTaken)
55#endif
56
58
71typedef struct
72{
73 vl_pool nodePool; // node pool which holds all the data in the set.
74 vl_uint16_t elementSize; // size of each set element, in bytes.
75 vl_dsidx_t totalElements; // total number of elements in the set.
76 vl_compare_function comparator; // comparator function pointer. see vl_compare.
77
78 vl_set_iter root; // root iterator. may change upon insert/remove operations.
79} vl_set;
80
101VL_API void vlSetInit(vl_set* set, vl_memsize_t elementSize, vl_compare_function compFunc);
102
121VL_API void vlSetFree(vl_set* set);
122
144VL_API vl_set* vlSetNew(vl_memsize_t elementSize, vl_compare_function compFunc);
145
165VL_API void vlSetDelete(vl_set* set);
166
184VL_API vl_set_iter vlSetFront(vl_set* set);
185
203VL_API vl_set_iter vlSetBack(vl_set* set);
204
226VL_API vl_set_iter vlSetInsert(vl_set* set, const void* elem);
227
254VL_API void* vlSetSample(vl_set* set, vl_set_iter iter);
255
277VL_API vl_set_iter vlSetNext(vl_set* set, vl_set_iter iter);
278
300VL_API vl_set_iter vlSetPrev(vl_set* set, vl_set_iter iter);
301
321VL_API void vlSetRemove(vl_set* set, vl_set_iter iter);
322
342VL_API void vlSetRemoveElem(vl_set* set, const void* elem);
343
362VL_API void vlSetClear(vl_set* set);
363
392VL_API vl_set* vlSetClone(const vl_set* src, vl_set* dest);
393
427VL_API int vlSetCopy(vl_set* src, vl_set_iter begin, vl_set_iter end, vl_set* dest);
428
448VL_API vl_set_iter vlSetFind(vl_set* set, const void* elem);
449
484VL_API vl_set* vlSetUnion(vl_set* a, vl_set* b, vl_set* dest);
485
521VL_API vl_set* vlSetIntersection(vl_set* a, vl_set* b, vl_set* dest);
522
558VL_API vl_set* vlSetDifference(vl_set* a, vl_set* b, vl_set* dest);
559
560#endif // VL_SET_H
VL_STRUCTURE_INDEX_T vl_dsidx_t
Index type for data structures.
Definition vl_numtypes.h:75
VL_POOL_INDEX_T vl_pool_idx
Definition vl_pool.h:53
Fixed-size memory pool with stable indices and geometric growth.
Definition vl_pool.h:141
vl_pool nodePool
Definition vl_set.h:73
VL_API vl_set_iter vlSetBack(vl_set *set)
Definition vl_set.c:86
vl_pool_idx vl_set_iter
Definition vl_set.h:57
VL_API vl_set * vlSetClone(const vl_set *src, vl_set *dest)
Clones the specified set to another.
Definition vl_set.c:772
VL_API void vlSetInit(vl_set *set, vl_memsize_t elementSize, vl_compare_function compFunc)
Definition vl_set.c:248
VL_API void vlSetRemoveElem(vl_set *set, const void *elem)
Definition vl_set.c:763
VL_API vl_set_iter vlSetPrev(vl_set *set, vl_set_iter iter)
Definition vl_set.c:328
VL_API vl_set * vlSetNew(vl_memsize_t elementSize, vl_compare_function compFunc)
Definition vl_set.c:259
vl_dsidx_t totalElements
Definition vl_set.h:75
VL_API void vlSetDelete(vl_set *set)
Definition vl_set.c:266
VL_API void vlSetClear(vl_set *set)
Definition vl_set.c:765
VL_API void vlSetFree(vl_set *set)
Definition vl_set.c:257
VL_API 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:795
VL_API vl_set_iter vlSetFront(vl_set *set)
Definition vl_set.c:69
VL_API void vlSetRemove(vl_set *set, vl_set_iter iter)
Definition vl_set.c:655
VL_API vl_set_iter vlSetNext(vl_set *set, vl_set_iter iter)
Definition vl_set.c:284
vl_set_iter root
Definition vl_set.h:78
vl_uint16_t elementSize
Definition vl_set.h:74
VL_API vl_set_iter vlSetInsert(vl_set *set, const void *elem)
Definition vl_set.c:371
VL_API vl_set_iter vlSetFind(vl_set *set, const void *elem)
Definition vl_set.c:829
VL_API 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:879
vl_compare_function comparator
Definition vl_set.h:76
VL_API void * vlSetSample(vl_set *set, vl_set_iter iter)
Definition vl_set.c:272
VL_API 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:910
VL_API 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:853
An ordered set.
Definition vl_set.h:72