Repository navigation
Expand file tree
/
Copy pathkv_store.h
More file actions
105 lines (99 loc) · 6.28 KB
/
Copy pathkv_store.h
File metadata and controls
105 lines (99 loc) · 6.28 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
#ifndef NEXDB_KV_STORE_H
#define NEXDB_KV_STORE_H
#include <stdio.h>
#include <stddef.h>
#define KV_MAX_KEY 64
#define KV_MAX_VALUE 8192
#define KV_INDEX_SIZE 1024
typedef struct {
char key[KV_MAX_KEY];
long offset;
int state; /* 0 unused, 1 used, 2 tombstone */
} kv_index_entry_t;
typedef struct {
const char *file_name;
kv_index_entry_t index[KV_INDEX_SIZE];
} kv_store_t;
void kv_store_init(kv_store_t *store, const char *file_name);
int kv_store_put(kv_store_t *store, const char *key, const char *value);
int kv_store_get(kv_store_t *store, const char *key, char *value_out);
int kv_store_delete(kv_store_t *store, const char *key);
int kv_store_list(kv_store_t *store,
int (*callback)(const char *key, const char *value, void *arg),
void *arg);
int kv_store_exists(kv_store_t *store, const char *key);
int kv_store_count(kv_store_t *store);
int kv_store_clear(kv_store_t *store);
int kv_store_put_ex(kv_store_t *store, const char *key, const char *value, long ttl);
int kv_store_expire(kv_store_t *store, const char *key, long ttl);
int kv_store_expire_at(kv_store_t *store, const char *key, long timestamp);
int kv_store_pexpire(kv_store_t *store, const char *key, long ttl_ms);
int kv_store_ttl(kv_store_t *store, const char *key);
int kv_store_pttl(kv_store_t *store, const char *key);
long kv_store_expire_time(kv_store_t *store, const char *key);
long kv_store_pexpire_time(kv_store_t *store, const char *key);
int kv_store_append(kv_store_t *store, const char *key, const char *suffix);
int kv_store_prepend(kv_store_t *store, const char *key, const char *prefix);
int kv_store_incr_by(kv_store_t *store, const char *key, long delta, long *result);
int kv_store_incr_by_float(kv_store_t *store, const char *key, double delta, double *result);
int kv_store_eval(kv_store_t *store, const char *key, double *result);
int kv_store_decr_by(kv_store_t *store, const char *key, long delta, long *result);
int kv_store_decr(kv_store_t *store, const char *key, long *result);
int kv_store_rename(kv_store_t *store, const char *old_key, const char *new_key);
int kv_store_rename_nx(kv_store_t *store, const char *old_key, const char *new_key);
int kv_store_mset(kv_store_t *store, const char *keys[], const char *values[], int count);
int kv_store_msetnx(kv_store_t *store, const char *keys[], const char *values[], int count);
int kv_store_mget(kv_store_t *store, const char *keys[], char *values[], int count);
int kv_store_mdel(kv_store_t *store, const char *keys[], int count);
int kv_store_get_del(kv_store_t *store, const char *key, char *value_out);
int kv_store_copy(kv_store_t *store, const char *src, const char *dst);
int kv_store_swap(kv_store_t *store, const char *key1, const char *key2);
int kv_store_setnx(kv_store_t *store, const char *key, const char *value);
int kv_store_getset(kv_store_t *store, const char *key, const char *value, char *old_value);
int kv_store_getex(kv_store_t *store, const char *key, long ttl, char *value_out);
int kv_store_persist(kv_store_t *store, const char *key);
int kv_store_scan(kv_store_t *store, const char *prefix,
int (*callback)(const char *key, const char *value, void *arg),
void *arg);
int kv_store_strlen(kv_store_t *store, const char *key);
int kv_store_get_range(kv_store_t *store, const char *key, int start, int end, char *out);
int kv_store_set_range(kv_store_t *store, const char *key, int offset, const char *value, int *result_len);
int kv_store_trim(kv_store_t *store, const char *key, int new_len);
int kv_store_lpad(kv_store_t *store, const char *key, size_t target_len, char pad_char);
int kv_store_rpad(kv_store_t *store, const char *key, size_t target_len, char pad_char);
int kv_store_random_key(kv_store_t *store, char *key_out);
int kv_store_count_prefix(kv_store_t *store, const char *prefix);
int kv_store_del_prefix(kv_store_t *store, const char *prefix);
int kv_store_upper(kv_store_t *store, const char *key);
int kv_store_lower(kv_store_t *store, const char *key);
int kv_store_reverse(kv_store_t *store, const char *key);
int kv_store_lstrip(kv_store_t *store, const char *key);
int kv_store_rstrip(kv_store_t *store, const char *key);
int kv_store_strip(kv_store_t *store, const char *key);
int kv_store_pop(kv_store_t *store, const char *key, char *ch_out);
int kv_store_replace(kv_store_t *store, const char *key, const char *old, const char *new_val);
int kv_store_set_bit(kv_store_t *store, const char *key, int offset, int bit);
int kv_store_get_bit(kv_store_t *store, const char *key, int offset);
int kv_store_bitcount(kv_store_t *store, const char *key);
long kv_store_file_size(kv_store_t *store);
int kv_store_mul_by(kv_store_t *store, const char *key, long factor, long *result);
int kv_store_div_by(kv_store_t *store, const char *key, long divisor, long *result);
int kv_store_mod_by(kv_store_t *store, const char *key, long divisor, long *result);
int kv_store_pow_by(kv_store_t *store, const char *key, long exponent, long *result);
int kv_store_abs(kv_store_t *store, const char *key, long *result);
int kv_store_repeat(kv_store_t *store, const char *key, size_t count, char *result);
int kv_store_del_if(kv_store_t *store, const char *key, const char *expected);
int kv_store_random_pair(kv_store_t *store, char *key_out, char *value_out);
int kv_store_strpos(kv_store_t *store, const char *key, const char *substr);
int kv_store_get_regex(kv_store_t *store, const char *key, const char *pattern, char *match_out);
int kv_store_set_regex(kv_store_t *store, const char *key, const char *pattern, const char *replacement);
int kv_json_extract_field(const char *json, const char *json_key, char *value_out, size_t out_len);
void kv_json_minify(char *json);
int kv_store_json_get(kv_store_t *store, const char *key, const char *json_key, char *value_out);
int kv_store_json_set(kv_store_t *store, const char *key, const char *json_key, const char *json_value);
int kv_store_json_del(kv_store_t *store, const char *key, const char *json_key);
int kv_store_json_get_best(kv_store_t *store, const char *prefix, const char *json_key, int limit,
char keys[][KV_MAX_KEY], char values[][KV_MAX_VALUE]);
int kv_store_json_get_worst(kv_store_t *store, const char *prefix, const char *json_key, int limit,
char keys[][KV_MAX_KEY], char values[][KV_MAX_VALUE]);
#endif // NEXDB_KV_STORE_H