File: hmproto.h

package info (click to toggle)
critnib 1.1-2.1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 208 kB
  • sloc: ansic: 1,414; sh: 100; makefile: 3
file content (62 lines) | stat: -rw-r--r-- 1,821 bytes parent folder | download | duplicates (2)
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
55
56
57
58
59
60
61
62
#include <stdint.h>

enum find_dir_t {
	FIND_L  = -2,
	FIND_LE = -1,
	FIND_EQ =  0,
	FIND_GE = +1,
	FIND_G  = +2,
};

#define HM_PROTOS(x) \
    void *x##_new(void);\
    void x##_delete(void *c);\
    \
    int x##_insert(void *c, uintptr_t key, void *value, int update);\
    void *x##_remove(void *c, uintptr_t key);\
    void *x##_get(void *c, uintptr_t key);\
    void *x##_find_le(void *c, uintptr_t key);\
    int x##_find(void *c, uintptr_t key, int dir, uintptr_t *rkey, void *rvalue);

//HM_PROTOS(critbit)
//HM_PROTOS(tcradix)
HM_PROTOS(critnib)
//HM_PROTOS(critnib_tag)

void *(*hm_new)(void);
void (*hm_delete)(void *c);
int (*hm_insert)(void *c, uintptr_t key, void *value, int update);
void *(*hm_remove)(void *c, uintptr_t key);
void *(*hm_get)(void *c, uintptr_t key);
void *(*hm_find_le)(void *c, uintptr_t key);
int (*hm_find)(void *c, uintptr_t key, int dir, uintptr_t *rkey, void *rvalue);
const char *hm_name;
int hm_immutable;

#define HM_SELECT_ONE(x,f) hm_##f=x##_##f
#define HM_SELECT(x) \
    HM_SELECT_ONE(x,new);\
    HM_SELECT_ONE(x,delete);\
    HM_SELECT_ONE(x,insert);\
    HM_SELECT_ONE(x,remove);\
    HM_SELECT_ONE(x,get);\
    HM_SELECT_ONE(x,find_le);\
    HM_SELECT_ONE(x,find);\
    hm_name=#x

#define HM_ARR(x,imm) { x##_new, x##_delete, x##_insert, x##_remove, x##_get, \
                        x##_find_le, x##_find, #x, imm }
struct hm
{
    void *(*hm_new)(void);
    void (*hm_delete)(void *c);
    int (*hm_insert)(void *c, uintptr_t key, void *value, int update);
    void *(*hm_remove)(void *c, uintptr_t key);
    void *(*hm_get)(void *c, uintptr_t key);
    void *(*hm_find_le)(void *c, uintptr_t key);
    int (*hm_find)(void *c, uintptr_t key, int dir, uintptr_t *rkey, void *rvalue);
    const char *hm_name;
    int hm_immutable;
} hms[1];

void hm_select(int i);