4d8b78f39ab22147ee12b7db5fd0f28eaa727ef6
[nbds] / include / map.h
1 #ifndef MAP_H
2 #define MAP_H
3
4 #include "datatype.h"
5
6 typedef struct map map_t;
7 typedef struct map_impl map_impl_t;
8
9 map_t *  map_alloc  (const map_impl_t *map_impl, const datatype_t *key_type);
10 uint64_t map_get    (map_t *map, void *key);
11 uint64_t map_set    (map_t *map, void *key, uint64_t new_val);
12 uint64_t map_add    (map_t *map, void *key, uint64_t new_val);
13 uint64_t map_cas    (map_t *map, void *key, uint64_t expected_val, uint64_t new_val);
14 uint64_t map_replace(map_t *map, void *key, uint64_t new_val);
15 uint64_t map_remove (map_t *map, void *key);
16 uint64_t map_count  (map_t *map);
17 void     map_print  (map_t *map);
18 void     map_free   (map_t *map);
19
20 /////////////////////////////////////////////////////////////////////////////////////
21
22 #define CAS_EXPECT_DOES_NOT_EXIST ( 0)
23 #define CAS_EXPECT_EXISTS         (-1)
24 #define CAS_EXPECT_WHATEVER       (-2)
25
26 typedef void *   (*map_alloc_t)  (const datatype_t *);
27 typedef uint64_t (*map_cas_t)    (void *, void *, uint64_t, uint64_t);
28 typedef uint64_t (*map_get_t)    (void *, void *);
29 typedef uint64_t (*map_remove_t) (void *, void *);
30 typedef uint64_t (*map_count_t)  (void *);
31 typedef void     (*map_print_t)  (void *);
32 typedef void     (*map_free_t)   (void *);
33
34 struct map_impl {
35     map_alloc_t  alloc;
36     map_cas_t    cas;
37     map_get_t    get;
38     map_remove_t remove;
39     map_count_t  count;
40     map_print_t  print;
41     map_free_t   free_;
42 };
43
44 #endif//MAP_H