]> pd.if.org Git - nbds/blob - map/mlocal.h
generalize skiplist from a set to an updatable map
[nbds] / map / mlocal.h
1 #ifndef STRUCT_H
2 #define STRUCT_H
3
4 #define CAS_EXPECT_DOES_NOT_EXIST ( 0)
5 #define CAS_EXPECT_EXISTS         (-1)
6 #define CAS_EXPECT_WHATEVER       (-2)
7
8 typedef struct ht hashtable_t;
9 hashtable_t *ht_alloc (void);
10 uint64_t ht_cas    (hashtable_t *ht, const char *key, uint32_t key_len, uint64_t expected_val, uint64_t val);
11 uint64_t ht_get    (hashtable_t *ht, const char *key, uint32_t len);
12 uint64_t ht_remove (hashtable_t *ht, const char *key, uint32_t len);
13 uint64_t ht_count  (hashtable_t *ht);
14 void     ht_print  (hashtable_t *ht);
15 void     ht_free   (hashtable_t *ht);
16
17 typedef struct ll list_t;
18 list_t * ll_alloc  (void);
19 uint64_t ll_lookup (list_t *ll, const void *key_data, uint32_t key_len);
20 uint64_t ll_cas    (list_t *ll, const void *key_data, uint32_t key_len, uint64_t expected_val, uint64_t new_val);
21 uint64_t ll_remove (list_t *ll, const void *key_data, uint32_t key_len);
22 void     ll_print  (list_t *ll);
23 void     ll_free   (list_t *ll);
24
25 typedef struct sl skiplist_t;
26 skiplist_t * sl_alloc (void);
27 uint64_t sl_lookup (skiplist_t *sl, const void *key_data, uint32_t key_len);
28 uint64_t sl_cas    (skiplist_t *sl, const void *key_data, uint32_t key_len, uint64_t expected_val, uint64_t new_val);
29 uint64_t sl_remove (skiplist_t *sl, const void *key_data, uint32_t key_len);
30 void     sl_print  (skiplist_t *sl);
31 void     sl_free   (list_t *sl);
32
33
34 #endif//STRUCT_H