add rbtree/testcase.c/Makefile

This commit is contained in:
King
2024-05-23 15:49:09 +00:00
parent 1b865836df
commit ea5291f3fe
6 changed files with 868 additions and 8 deletions

View File

@@ -9,6 +9,9 @@
extern kvs_array_t global_array;
#endif
#if ENABLE_RBTREE
extern kvs_rbtree_t global_rbtree;
#endif
@@ -22,16 +25,25 @@ void kvs_free(void *ptr) {
const char *command[] = {
"SET", "GET", "DEL", "MOD", "EXIST"
"SET", "GET", "DEL", "MOD", "EXIST",
"RSET", "RGET", "RDEL", "RMOD", "REXIST"
};
enum {
KVS_CMD_START = 0,
// array
KVS_CMD_SET = KVS_CMD_START,
KVS_CMD_GET,
KVS_CMD_DEL,
KVS_CMD_MOD,
KVS_CMD_EXIST,
// rbtree
KVS_CMD_RSET,
KVS_CMD_RGET,
KVS_CMD_RDEL,
KVS_CMD_RMOD,
KVS_CMD_REXIST,
KVS_CMD_COUNT,
};
@@ -50,7 +62,7 @@ int kvs_split_token(char *msg, char *tokens[]) {
char *token = strtok(msg, " ");
while (token != NULL) {
printf("idx: %d, %s\n", idx, token);
//printf("idx: %d, %s\n", idx, token);
tokens[idx ++] = token;
token = strtok(NULL, " ");
@@ -82,7 +94,7 @@ int kvs_filter_protocol(char **tokens, int count, char *response) {
char *value = tokens[2];
switch(cmd) {
#if ENABLE_ARRAY
case KVS_CMD_SET:
ret = kvs_array_set(&global_array ,key, value);
if (ret < 0) {
@@ -94,7 +106,7 @@ int kvs_filter_protocol(char **tokens, int count, char *response) {
}
break;
case KVS_CMD_GET:
case KVS_CMD_GET: {
char *result = kvs_array_get(&global_array, key);
if (result == NULL) {
length = sprintf(response, "NO EXIST\r\n");
@@ -102,6 +114,7 @@ int kvs_filter_protocol(char **tokens, int count, char *response) {
length = sprintf(response, "%s\r\n", result);
}
break;
}
case KVS_CMD_DEL:
ret = kvs_array_del(&global_array ,key);
if (ret < 0) {
@@ -125,12 +138,66 @@ int kvs_filter_protocol(char **tokens, int count, char *response) {
case KVS_CMD_EXIST:
ret = kvs_array_exist(&global_array ,key);
if (ret == 0) {
length = sprintf(response, "EXIST\n");
length = sprintf(response, "EXIST\r\n");
} else {
length = sprintf(response, "NO EXIST\r\n");
}
break;
#endif
// rbtree
#if ENABLE_RBTREE
case KVS_CMD_RSET:
ret = kvs_rbtree_set(&global_rbtree ,key, value);
if (ret < 0) {
length = sprintf(response, "ERROR\r\n");
} else if (ret == 0) {
length = sprintf(response, "OK\r\n");
} else {
length = sprintf(response, "EXIST\r\n");
}
break;
case KVS_CMD_RGET: {
char *result = kvs_rbtree_get(&global_rbtree, key);
if (result == NULL) {
length = sprintf(response, "NO EXIST\r\n");
} else {
length = sprintf(response, "%s\r\n", result);
}
break;
}
case KVS_CMD_RDEL:
ret = kvs_rbtree_del(&global_rbtree ,key);
if (ret < 0) {
length = sprintf(response, "ERROR\r\n");
} else if (ret == 0) {
length = sprintf(response, "OK\r\n");
} else {
length = sprintf(response, "NO EXIST\r\n");
}
break;
case KVS_CMD_RMOD:
ret = kvs_rbtree_mod(&global_rbtree ,key, value);
if (ret < 0) {
length = sprintf(response, "ERROR\r\n");
} else if (ret == 0) {
length = sprintf(response, "OK\r\n");
} else {
length = sprintf(response, "NO EXIST\r\n");
}
break;
case KVS_CMD_REXIST:
ret = kvs_rbtree_exist(&global_rbtree ,key);
if (ret == 0) {
length = sprintf(response, "EXIST\r\n");
} else {
length = sprintf(response, "NO EXIST\r\n");
}
break;
#endif
default:
assert(0);
}
return length;
@@ -151,7 +218,7 @@ int kvs_protocol(char *msg, int length, char *response) { //
// DEL Key
if (msg == NULL || length <= 0 || response == NULL) return -1;
printf("recv %d : %s\n", length, msg);
//printf("recv %d : %s\n", length, msg);
char *tokens[KVS_MAX_TOKENS] = {0};
@@ -171,9 +238,25 @@ int init_kvengine(void) {
kvs_array_create(&global_array);
#endif
#if ENABLE_RBTREE
memset(&global_rbtree, 0, sizeof(kvs_rbtree_t));
kvs_rbtree_create(&global_rbtree);
#endif
return 0;
}
void dest_kvengine(void) {
#if ENABLE_ARRAY
kvs_array_destory(&global_array);
#endif
#if ENABLE_RBTREE
kvs_rbtree_destory(&global_rbtree);
#endif
}
int main(int argc, char *argv[]) {
@@ -191,6 +274,9 @@ int main(int argc, char *argv[]) {
#elif (NETWORK_SELECT == NETWORK_NTYCO)
proactor_start(port, kvs_protocol);
#endif
dest_kvengine();
}