From 732cd445fa4150012a200d0337db73e2b0826dc5 Mon Sep 17 00:00:00 2001 From: krutoykoder1337 Date: Thu, 2 Jan 2025 22:56:28 +0300 Subject: [PATCH] refactor nonbintree to c++ --- utils/nonbin_tree.c | 72 --------------------------------------------- utils/nonbin_tree.h | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 83 deletions(-) delete mode 100644 utils/nonbin_tree.c diff --git a/utils/nonbin_tree.c b/utils/nonbin_tree.c deleted file mode 100644 index 70966aa..0000000 --- a/utils/nonbin_tree.c +++ /dev/null @@ -1,72 +0,0 @@ -#include -#include -#include "nonbin_tree.h" - - -tree_node* create_tree(void* data){ - tree_node* tree_root = malloc(sizeof(tree_node)); - tree_root->child = NULL; - tree_root->id = 0; - tree_root->brother = NULL; - tree_root->data = data; -} - - -void add_tree_node(uint32_t* path, void* data, int path_len, tree_node* root){ - tree_node* current_node = root; - tree_node* current; - tree_node* end_node; - char is_find; - for (int i = 1; i < path_len; i++){ - if (current_node->child == NULL){ - current_node->child = malloc(sizeof(tree_node)); - current_node->child->id = path[i]; - current_node->child->brother = NULL; - current_node->child->child = NULL; - } - current_node = current_node->child; - is_find = 0; - for (current = current_node; current != NULL; current = current->brother){ - if (current->id == path[i]){ - current_node = current; - is_find = 1; - break; - } - if (current->brother == NULL) end_node = current; - } - if (!is_find){ - current = end_node; - current->brother = malloc(sizeof(tree_node)); - current->brother->id = path[i]; - current->brother->brother = NULL; - current->brother->child = NULL; - current = current->brother; - current_node = current; - } - } - current_node->data = data; -} - - -void* get_tree_node(uint32_t* path, int path_len, tree_node* root){ - tree_node* current_node = root; - tree_node* current; - tree_node* end_node; - char is_find; - for (int i = 1; i < path_len; i++){ - if (current_node->child == NULL){ - return NULL; - } - current_node = current_node->child; - is_find = 0; - for (current = current_node; current != NULL; current = current->brother){ - if (current->id == path[i]){ - current_node = current; - is_find = 1; - break; - } - } - if (!is_find) return NULL; - } - return current_node->data; -} diff --git a/utils/nonbin_tree.h b/utils/nonbin_tree.h index 8377b66..ad063cc 100644 --- a/utils/nonbin_tree.h +++ b/utils/nonbin_tree.h @@ -1,14 +1,23 @@ #include - -typedef struct tree_node -{ - struct tree_node* child; - struct tree_node* brother; - uint32_t id; - void* data; -} tree_node; +#include +#include -tree_node* create_tree(void* data); -void add_tree_node(uint32_t* path, void* data, int path_len, tree_node* root); -void* get_tree_node(uint32_t* path, int path_len, tree_node* root); +template struct tree_node{ + struct tree_node* child; + struct tree_node* brother; + std::string id; + T* data; +}; + + +template class NonBinTree{ + public: + NonBinTree(T* data); + void add_url(std::string url, T* handler); + T* get_url(std::string url); + private: + void add_tree_node(std::queue path, T* data); + T* get_tree_node(std::queue path); + tree_node *root = new tree_node; +};