提供array和hashtable的存储引擎层的二进制安全支持,把入口函数修改为接收参数长度,将strlen、strcmp、strcpy替换。
This commit is contained in:
80
kvstore.h
80
kvstore.h
@@ -19,11 +19,6 @@
|
||||
|
||||
#define NETWORK_SELECT NETWORK_REACTOR
|
||||
|
||||
// 8MB
|
||||
#define MAX_PAYLOAD_LEN 8388608
|
||||
#define MAX_OPCOUNT 1024
|
||||
// 4MB
|
||||
#define MAX_ARG_LEN 4194304
|
||||
|
||||
#define KVS_MAX_TOKENS 128
|
||||
|
||||
@@ -33,6 +28,8 @@
|
||||
|
||||
#define NEW_KVSTORE 1
|
||||
|
||||
#define BIN_SAFE 1
|
||||
|
||||
|
||||
// typedef int (*msg_handler)(char *msg, int length, char *response);
|
||||
typedef int (*msg_handler)(char *request, int request_length, int *consumed_out, char *response, int *response_length);
|
||||
@@ -45,6 +42,37 @@ extern int ntyco_start(unsigned short port, msg_handler handler);
|
||||
|
||||
#if ENABLE_ARRAY
|
||||
|
||||
#if BIN_SAFE
|
||||
#define KVS_ARRAY_SIZE 1024
|
||||
|
||||
typedef struct kvs_array_item_s {
|
||||
uint8_t *key;
|
||||
size_t key_len;
|
||||
|
||||
uint8_t *value;
|
||||
size_t value_len;
|
||||
} kvs_array_item_t;
|
||||
|
||||
|
||||
typedef struct kvs_array_s {
|
||||
kvs_array_item_t *table;
|
||||
int total; // 元素上界
|
||||
} kvs_array_t;
|
||||
|
||||
int kvs_array_create(kvs_array_t *inst);
|
||||
void kvs_array_destroy(kvs_array_t *inst);
|
||||
int kvs_array_set_bin(kvs_array_t *inst,
|
||||
const void *key, size_t key_len,
|
||||
const void *value, size_t value_len);
|
||||
void *kvs_array_get_bin(kvs_array_t *inst,
|
||||
const void *key, size_t key_len,
|
||||
size_t *out_value_len);
|
||||
int kvs_array_del_bin(kvs_array_t *inst, const void *key, size_t key_len);
|
||||
int kvs_array_mod_bin(kvs_array_t *inst,
|
||||
const void *key, size_t key_len,
|
||||
const void *value, size_t value_len);
|
||||
int kvs_array_exist_bin(kvs_array_t *inst, const void *key, size_t key_len);
|
||||
#else
|
||||
typedef struct kvs_array_item_s {
|
||||
char *key;
|
||||
char *value;
|
||||
@@ -59,14 +87,14 @@ typedef struct kvs_array_s {
|
||||
} kvs_array_t;
|
||||
|
||||
int kvs_array_create(kvs_array_t *inst);
|
||||
void kvs_array_destory(kvs_array_t *inst);
|
||||
void kvs_array_destroy(kvs_array_t *inst);
|
||||
|
||||
int kvs_array_set(kvs_array_t *inst, char *key, char *value);
|
||||
char* kvs_array_get(kvs_array_t *inst, char *key);
|
||||
int kvs_array_del(kvs_array_t *inst, char *key);
|
||||
int kvs_array_mod(kvs_array_t *inst, char *key, char *value);
|
||||
int kvs_array_exist(kvs_array_t *inst, char *key);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -102,7 +130,7 @@ typedef struct _rbtree {
|
||||
typedef struct _rbtree kvs_rbtree_t;
|
||||
|
||||
int kvs_rbtree_create(kvs_rbtree_t *inst);
|
||||
void kvs_rbtree_destory(kvs_rbtree_t *inst);
|
||||
void kvs_rbtree_destroy(kvs_rbtree_t *inst);
|
||||
int kvs_rbtree_set(kvs_rbtree_t *inst, char *key, char *value);
|
||||
char* kvs_rbtree_get(kvs_rbtree_t *inst, char *key);
|
||||
int kvs_rbtree_del(kvs_rbtree_t *inst, char *key);
|
||||
@@ -120,6 +148,38 @@ int kvs_rbtree_exist(kvs_rbtree_t *inst, char *key);
|
||||
#define MAX_VALUE_LEN 512
|
||||
#define MAX_TABLE_SIZE 1024
|
||||
|
||||
#if BIN_SAFE
|
||||
#define MAX_TABLE_SIZE 1024
|
||||
typedef struct hashnode_s {
|
||||
uint8_t *key;
|
||||
size_t key_len;
|
||||
|
||||
uint8_t *value;
|
||||
size_t value_len;
|
||||
|
||||
struct hashnode_s *next;
|
||||
} hashnode_t;
|
||||
|
||||
typedef struct hashtable_s {
|
||||
hashnode_t **nodes;
|
||||
int max_slots;
|
||||
int count;
|
||||
} hashtable_t;
|
||||
|
||||
typedef struct hashtable_s kvs_hash_t;
|
||||
|
||||
int kvs_hash_create(kvs_hash_t *hash);
|
||||
void kvs_hash_destroy(kvs_hash_t *hash);
|
||||
int kvs_hash_set_bin(kvs_hash_t *h, const void *key, size_t key_len, const void *value, size_t value_len);
|
||||
void *kvs_hash_get_bin(kvs_hash_t *h, const void *key, size_t key_len, size_t *out_value_len);
|
||||
int kvs_hash_get_copy_bin(kvs_hash_t *h, const void *key, size_t key_len, void **out_buf, size_t *out_len);
|
||||
int kvs_hash_mod_bin(kvs_hash_t *h, const void *key, size_t key_len, const void *value, size_t value_len);
|
||||
int kvs_hash_del_bin(kvs_hash_t *h, const void *key, size_t key_len);
|
||||
int kvs_hash_exist_bin(kvs_hash_t *h, const void *key, size_t key_len);
|
||||
int kvs_hash_count(kvs_hash_t *h);
|
||||
|
||||
#else
|
||||
|
||||
#define ENABLE_KEY_POINTER 1
|
||||
|
||||
|
||||
@@ -149,14 +209,14 @@ typedef struct hashtable_s kvs_hash_t;
|
||||
|
||||
|
||||
int kvs_hash_create(kvs_hash_t *hash);
|
||||
void kvs_hash_destory(kvs_hash_t *hash);
|
||||
void kvs_hash_destroy(kvs_hash_t *hash);
|
||||
int kvs_hash_set(hashtable_t *hash, char *key, char *value);
|
||||
char * kvs_hash_get(kvs_hash_t *hash, char *key);
|
||||
int kvs_hash_mod(kvs_hash_t *hash, char *key, char *value);
|
||||
int kvs_hash_del(kvs_hash_t *hash, char *key);
|
||||
int kvs_hash_exist(kvs_hash_t *hash, char *key);
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user