1 /* sdb - MIT - Copyright 2019-2020 - pancake */
2 
3 #include "set.h"
4 
5 //// set foreach spaguetti
6 typedef struct {
7 	void *cbptr;
8 	void *userdata;
9 } SetData;
10 
u_foreach_cb(void * user,const ut64 k,const void * nada)11 static bool u_foreach_cb(void *user, const ut64 k, const void *nada) {
12 	SetData *sd = (SetData*)user;
13 	set_u_foreach_cb cb = (set_u_foreach_cb)sd->cbptr;
14 	return cb (sd->userdata, k);
15 }
16 
set_u_foreach(SetU * s,set_u_foreach_cb cb,void * userdata)17 SDB_API void set_u_foreach(SetU *s, set_u_foreach_cb cb, void *userdata) {
18 	SetData sd = {cb, userdata};
19 	ht_up_foreach (s, u_foreach_cb, &sd);
20 }
21 
p_foreach_cb(void * user,const void * k,const void * nada)22 static bool p_foreach_cb(void *user, const void *k, const void *nada) {
23 	SetData *sd = (SetData*)user;
24 	set_p_foreach_cb cb = (set_p_foreach_cb)sd->cbptr;
25 	return cb (sd->userdata, k);
26 }
27 
set_p_foreach(SetP * s,set_p_foreach_cb cb,void * userdata)28 SDB_API void set_p_foreach(SetP *s, set_p_foreach_cb cb, void *userdata) {
29 	SetData sd = {cb, userdata};
30 	ht_pp_foreach (s, p_foreach_cb, &sd);
31 }
32 ////
33 
set_p_new(void)34 SDB_API SetP *set_p_new(void) {
35 	return ht_pp_new0 ();
36 }
37 
set_p_add(SetP * s,void * u)38 SDB_API void set_p_add(SetP *s, void *u) {
39 	ht_pp_insert (s, u, (void*)1);
40 }
41 
set_p_contains(SetP * s,void * u)42 SDB_API bool set_p_contains(SetP *s, void *u) {
43 	return ht_pp_find (s, u, NULL) != NULL;
44 }
45 
set_p_delete(SetP * s,void * u)46 SDB_API void set_p_delete(SetP *s, void *u) {
47 	ht_pp_delete (s, u);
48 }
49 
set_p_free(SetP * p)50 SDB_API void set_p_free(SetP *p) {
51 	ht_pp_free ((HtPP*)p);
52 }
53 
54 // u
55 
set_u_new(void)56 SDB_API SetU *set_u_new(void) {
57 	return (SetU*)ht_up_new0 ();
58 }
59 
set_u_add(SetU * s,ut64 u)60 SDB_API void set_u_add(SetU *s, ut64 u) {
61 	ht_up_insert (s, u, (void*)1);
62 }
63 
set_u_contains(SetU * s,ut64 u)64 SDB_API bool set_u_contains(SetU *s, ut64 u) {
65 	return ht_up_find (s, u, NULL) != NULL;
66 }
67 
set_u_delete(SetU * s,ut64 u)68 SDB_API void set_u_delete(SetU *s, ut64 u) {
69 	ht_up_delete (s, u);
70 }
71 
set_u_free(SetU * s)72 SDB_API void set_u_free(SetU *s) {
73 	ht_up_free (s);
74 }
75