Cthulhu  0.2.10
Cthulhu compiler collection
set.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-only
2 
3 #pragma once
4 
5 #include <ctu_std_api.h>
6 
7 #include "core/analyze.h"
8 
9 #include "std/typeinfo.h"
10 
12 
13 typedef struct arena_t arena_t;
14 
19 
21 typedef struct set_t set_t;
22 
24 typedef struct item_t item_t;
25 
34 CT_STD_API set_t *set_new(IN_DOMAIN(>, 0) size_t size, hash_info_t info, IN_NOTNULL arena_t *arena);
35 
43 CT_STD_API const void *set_add(IN_NOTNULL set_t *set, IN_NOTNULL const void *key);
44 
53 CT_STD_API bool set_contains(IN_NOTNULL const set_t *set, IN_NOTNULL const void *key);
54 
60 CT_STD_API void set_delete(IN_NOTNULL set_t *set, IN_NOTNULL const void *key);
61 
68 CT_STD_API bool set_empty(IN_NOTNULL set_t *set);
69 
73 CT_STD_API void set_reset(IN_NOTNULL set_t *set);
74 
77 typedef struct set_iter_t
78 {
80  size_t index;
81 
84 } set_iter_t;
85 
94 CT_STD_API set_iter_t set_iter(IN_NOTNULL set_t *set);
95 
103 CT_STD_API const void *set_next(IN_NOTNULL set_iter_t *iter);
104 
112 CT_STD_API bool set_has_next(IN_NOTNULL set_iter_t *iter);
113 
115 
CT_NODISCARD size_t size
Definition: scan.h:128
#define CT_PUREFN
mark a function as pure, always returns the same value for the same arguments
Definition: analyze.h:228
#define CT_NODISCARD
mark a function as returning a value that must be used
#define IN_NOTNULL
annotate a parameter as not being null
#define IN_DOMAIN(cmp, it)
annotate a parameter as being bounded by the expression of cmp and it
#define CT_BEGIN_API
Definition: compiler.h:129
#define CT_END_API
Definition: compiler.h:130
CT_NODISCARD CT_STD_API set_t * set_new(size_t size, hash_info_t info, arena_t *arena)
create a new set
Definition: set.c:51
CT_NODISCARD CT_PUREFN CT_STD_API bool set_empty(set_t *set)
check if a set is empty
Definition: set.c:179
CT_STD_API const void * set_add(set_t *set, const void *key)
add a key to a set
Definition: set.c:85
CT_STD_API void set_reset(set_t *set)
clear all keys from a set
Definition: set.c:195
CT_STD_API void set_delete(set_t *set, const void *key)
remove a key from a set
Definition: set.c:148
CT_NODISCARD CT_PUREFN CT_STD_API set_iter_t set_iter(set_t *set)
acquire a set iterator for a set
Definition: set.c:268
CT_NODISCARD CT_STD_API const void * set_next(set_iter_t *iter)
get the next item from a set iterator
Definition: set.c:288
CT_NODISCARD CT_PUREFN CT_STD_API bool set_contains(const set_t *set, const void *key)
check if a set contains a key
Definition: set.c:118
CT_NODISCARD CT_PUREFN CT_STD_API bool set_has_next(set_iter_t *iter)
check if a set iterator has more items
Definition: set.c:301
an allocator object
Definition: arena.h:86
information for using a type in a hashset or hashmap
Definition: typeinfo.h:39
a node in a chain of set entries
Definition: set.c:13
const void * key
the key to this bucket
Definition: set.c:14
a set iterator handle
Definition: set.h:78
item_t * next
the next item
Definition: set.h:83
item_t * current
the current item
Definition: set.h:82
size_t index
the current bucket index
Definition: set.h:80
set_t * set
the set to iterate over
Definition: set.h:79
an unordered hash set
Definition: set.c:19