-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathord.h
More file actions
376 lines (259 loc) · 9.27 KB
/
ord.h
File metadata and controls
376 lines (259 loc) · 9.27 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
/*
* Copyright (c) 2016--2021 Wu, Xingbo <wuxb45@gmail.com>
*
* All rights reserved. No warranty, explicit or implicit, provided.
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
// skiplist {{{
struct skiplist;
extern struct skiplist *
skiplist_create(const struct kvmap_mm * const mm);
extern struct kv *
skiplist_get(struct skiplist * const list, const struct kref * const key, struct kv * const out);
extern bool
skiplist_probe(struct skiplist * const list, const struct kref * const key);
extern bool
skiplist_put(struct skiplist * const list, struct kv * const kv);
extern bool
skipsafe_put(struct skiplist * const list, struct kv * const kv);
extern bool
skiplist_merge(struct skiplist * const list, const struct kref * const kref,
kv_merge_func uf, void * const priv);
extern bool
skipsafe_merge(struct skiplist * const list, const struct kref * const kref,
kv_merge_func uf, void * const priv);
extern bool
skiplist_inp(struct skiplist * const list, const struct kref * const key,
kv_inp_func uf, void * const priv);
extern bool
skiplist_del(struct skiplist * const list, const struct kref * const key);
extern void
skiplist_clean(struct skiplist * const list);
extern void
skiplist_destroy(struct skiplist * const list);
extern void
skiplist_fprint(struct skiplist * const list, FILE * const out);
struct skiplist_iter;
extern struct skiplist_iter *
skiplist_iter_create(struct skiplist * const list);
extern void
skiplist_iter_seek(struct skiplist_iter * const iter, const struct kref * const key);
extern bool
skiplist_iter_valid(struct skiplist_iter * const iter);
extern struct kv *
skiplist_iter_peek(struct skiplist_iter * const iter, struct kv * const out);
extern bool
skiplist_iter_kref(struct skiplist_iter * const iter, struct kref * const kref);
extern bool
skiplist_iter_kvref(struct skiplist_iter * const iter, struct kvref * const kvref);
extern void
skiplist_iter_skip1(struct skiplist_iter * const iter);
extern void
skiplist_iter_skip(struct skiplist_iter * const iter, const u32 nr);
extern struct kv *
skiplist_iter_next(struct skiplist_iter * const iter, struct kv * const out);
extern bool
skiplist_iter_inp(struct skiplist_iter * const iter, kv_inp_func uf, void * const priv);
extern void
skiplist_iter_destroy(struct skiplist_iter * const iter);
extern const struct kvmap_api kvmap_api_skiplist;
extern const struct kvmap_api kvmap_api_skipsafe;
// }}} skiplist
// bptree {{{
struct bptree;
extern struct bptree *
bptree_create(const struct kvmap_mm * const mm);
extern struct kv *
bptree_get(struct bptree * const tree, const struct kref * const key, struct kv * const out);
extern bool
bptree_probe(struct bptree * const tree, const struct kref * const key);
extern bool
bptree_put(struct bptree * const tree, struct kv * const kv);
extern bool
bptree_merge(struct bptree * const tree, const struct kref * const kref,
kv_merge_func uf, void * const priv);
extern bool
bptree_inp(struct bptree * const tree, const struct kref * const key,
kv_inp_func uf, void * const priv);
extern bool
bptree_del(struct bptree * const tree, const struct kref * const key);
extern void
bptree_clean(struct bptree * const tree);
extern void
bptree_destroy(struct bptree * const tree);
extern void
bptree_fprint(struct bptree * const tree, FILE * const out);
struct bptree_iter;
extern struct bptree_iter *
bptree_iter_create(struct bptree * const tree);
extern void
bptree_iter_seek(struct bptree_iter * const iter, const struct kref * const key);
extern void
bptree_iter_seek_le(struct bptree_iter * const iter, const struct kref * const key);
extern bool
bptree_iter_valid(struct bptree_iter * const iter);
extern struct kv *
bptree_iter_peek(struct bptree_iter * const iter, struct kv * const out);
extern bool
bptree_iter_kref(struct bptree_iter * const iter, struct kref * const kref);
extern bool
bptree_iter_kvref(struct bptree_iter * const iter, struct kvref * const kvref);
extern struct kv *
bptree_iter_next(struct bptree_iter * const iter, struct kv * const out);
extern void
bptree_iter_skip1(struct bptree_iter * const iter);
extern void
bptree_iter_skip(struct bptree_iter * const iter, const u32 nr);
extern bool
bptree_iter_inp(struct bptree_iter * const iter, kv_inp_func uf, void * const priv);
extern void
bptree_iter_destroy(struct bptree_iter * const iter);
extern const struct kvmap_api kvmap_api_bptree;
// }}} bptree
// rdb {{{
#ifdef ROCKSDB
struct rdb;
struct rdb_iter;
extern struct rdb *
rdb_create(const char * const path, const u64 cache_size_mb);
extern struct kv *
rdb_get(struct rdb * const map, const struct kref * const key, struct kv * const out);
extern bool
rdb_probe(struct rdb * const map, const struct kref * const key);
extern bool
rdb_put(struct rdb * const map, struct kv * const kv);
extern bool
rdb_del(struct rdb * const map, const struct kref * const key);
extern void
rdb_destroy(struct rdb * const map);
extern void
rdb_fprint(struct rdb * const map, FILE * const out);
extern struct rdb_iter *
rdb_iter_create(struct rdb * const map);
extern void
rdb_iter_seek(struct rdb_iter * const iter, const struct kref * const key);
extern bool
rdb_iter_valid(struct rdb_iter * const iter);
extern struct kv *
rdb_iter_peek(struct rdb_iter * const iter, struct kv * const out);
extern void
rdb_iter_skip1(struct rdb_iter * const iter);
extern void
rdb_iter_skip(struct rdb_iter * const iter, const u32 nr);
extern struct kv *
rdb_iter_next(struct rdb_iter * const iter, struct kv * const out);
extern void
rdb_iter_destroy(struct rdb_iter * const iter);
extern const struct kvmap_api kvmap_api_rdb;
#endif // ROCKSDB
// }}} rdb
// ldb {{{
#ifdef LEVELDB
struct ldb;
struct ldb_iter;
extern struct ldb *
ldb_create(const char * const path, const u64 cache_size_mb);
extern struct kv *
ldb_get(struct ldb * const map, const struct kref * const key, struct kv * const out);
extern bool
ldb_probe(struct ldb * const map, const struct kref * const key);
extern bool
ldb_put(struct ldb * const map, struct kv * const kv);
extern bool
ldb_del(struct ldb * const map, const struct kref * const key);
extern void
ldb_destroy(struct ldb * const map);
extern void
ldb_fprint(struct ldb * const map, FILE * const out);
extern struct ldb_iter *
ldb_iter_create(struct ldb * const map);
extern void
ldb_iter_seek(struct ldb_iter * const iter, const struct kref * const key);
extern bool
ldb_iter_valid(struct ldb_iter * const iter);
extern struct kv *
ldb_iter_peek(struct ldb_iter * const iter, struct kv * const out);
extern void
ldb_iter_skip1(struct ldb_iter * const iter);
extern void
ldb_iter_skip(struct ldb_iter * const iter, const u32 nr);
extern struct kv *
ldb_iter_next(struct ldb_iter * const iter, struct kv * const out);
extern void
ldb_iter_destroy(struct ldb_iter * const iter);
extern const struct kvmap_api kvmap_api_ldb;
#endif // LEVELDB
// }}} ldb
// lmdb {{{
#ifdef LMDB
struct lmdb;
struct lmdb_ref;
struct lmdb_iter;
extern struct lmdb *
lmdb_open(const char * const path);
extern struct lmdb_ref *
lmdb_ref(struct lmdb * const db);
extern struct lmdb *
lmdb_unref(struct lmdb_ref * const ref);
extern struct lmdb_ref *
lmdbw_ref(struct lmdb * const db);
extern struct lmdb *
lmdbw_unref(struct lmdb_ref * const ref);
extern struct kv *
lmdb_get(struct lmdb_ref * const ref, const struct kref * const key, struct kv * const out);
extern struct kv *
lmdb1_get(struct lmdb * const db, const struct kref * const key, struct kv * const out);
extern bool
lmdb_probe(struct lmdb_ref * const ref, const struct kref * const key);
extern bool
lmdb1_probe(struct lmdb * const db, const struct kref * const key);
extern bool
lmdb_put(struct lmdb_ref * const ref, struct kv * const kv);
extern bool
lmdb1_put(struct lmdb * const db, struct kv * const kv);
extern bool
lmdbw_put(struct lmdb_ref * const ref, struct kv * const kv);
extern bool
lmdb_del(struct lmdb_ref * const ref, const struct kref * const key);
extern bool
lmdb1_del(struct lmdb * const db, const struct kref * const key);
extern bool
lmdbw_del(struct lmdb_ref * const ref, const struct kref * const key);
extern void
lmdb_clean(struct lmdb * const map);
extern void
lmdb_destroy(struct lmdb * const map);
extern void
lmdb_fprint(struct lmdb * const map, FILE * const out);
extern struct lmdb_iter *
lmdb_iter_create(struct lmdb_ref * const ref);
extern struct lmdb_iter *
lmdb1_iter_create(struct lmdb * const db);
extern void
lmdb_iter_seek(struct lmdb_iter * const iter, const struct kref * const key);
extern bool
lmdb_iter_valid(struct lmdb_iter * const iter);
extern struct kv *
lmdb_iter_peek(struct lmdb_iter * const iter, struct kv * const out);
extern void
lmdb_iter_skip1(struct lmdb_iter * const iter);
extern void
lmdb_iter_skip(struct lmdb_iter * const iter, const u32 nr);
extern struct kv *
lmdb_iter_next(struct lmdb_iter * const iter, struct kv * const out);
extern void
lmdb_iter_destroy(struct lmdb_iter * const iter);
extern void
lmdb1_iter_destroy(struct lmdb_iter * const iter);
extern const struct kvmap_api kvmap_api_lmdb;
extern const struct kvmap_api kvmap_api_lmdbw;
extern const struct kvmap_api kvmap_api_lmdb1;
#endif
// }}} lmdb
#ifdef __cplusplus
}
#endif
// vim:fdm=marker