-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmap.h
50 lines (40 loc) · 1.54 KB
/
map.h
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
#pragma once
#include "pavl.h"
typedef int map_keycmp_func(const void *k1, const void *k2, void *param);
typedef void map_item_func(void *key, void *data, void *param);
struct pavl_map
{
struct pavl_table *table;
struct libavl_allocator *alloc;
map_keycmp_func *compare;
map_item_func *itemfunc;
void *param;
};
struct pavl_map_entry
{
const void *key;
void *data;
};
struct pavl_map_trav
{
struct pavl_traverser trav;
};
struct pavl_map * map_create(map_keycmp_func *, void *,
struct libavl_allocator *);
void map_destroy(struct pavl_map *, map_item_func *);
void *map_insert(struct pavl_map *, const void *, void *);
void *map_delete(struct pavl_map *, const void *);
void *map_find(const struct pavl_map *, const void *, const void **);
void map_assert_insert(struct pavl_map *, const void *, void *);
void *map_assert_delete(struct pavl_map *, const void *);
#define map_count(map) ((size_t)(map)->table->pavl_count)
void map_t_init(struct pavl_map_trav *, struct pavl_map *);
void *map_t_first(struct pavl_map_trav *, struct pavl_map *, const void **);
void *map_t_last(struct pavl_map_trav *, struct pavl_map *, const void **);
void *map_t_find(struct pavl_map_trav *, struct pavl_map *, const void *);
void *map_t_next(struct pavl_map_trav *, const void **);
void *map_t_prev(struct pavl_map_trav *, const void **);
void *map_t_cur(struct pavl_map_trav *, const void **);
int map_cmp_uint32(const void *v1, const void *v2, void *dummy);
int map_cmp_int(const void *v1, const void *v2, void *dummy);
void map_free(void *key, void *data, void *unused);