From 41bc6516fa799fd91d7d2fba6a6d01bfb6950e3e Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Fri, 20 Jan 2023 12:08:05 +0100 Subject: [PATCH] feat(tree): add node bit flags support --- src/tree/balancing.c | 3 +++ src/tree/balancing.h | 8 ++++++++ src/tree/node.c | 12 ++++++++++++ src/tree/node.h | 12 ++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 src/tree/balancing.c create mode 100644 src/tree/balancing.h diff --git a/src/tree/balancing.c b/src/tree/balancing.c new file mode 100644 index 0000000..85ae1a3 --- /dev/null +++ b/src/tree/balancing.c @@ -0,0 +1,3 @@ +#include "balancing.h" + +void vieter_tree_node_balance_after_insert(vieter_tree_node *node) {} diff --git a/src/tree/balancing.h b/src/tree/balancing.h new file mode 100644 index 0000000..3e4c6bc --- /dev/null +++ b/src/tree/balancing.h @@ -0,0 +1,8 @@ +#ifndef VIETER_TREE_BALANCING +#define VIETER_TREE_BALANCING + +#include "node.h" + +void vieter_tree_node_balance_after_insert(vieter_tree_node *node); + +#endif diff --git a/src/tree/node.c b/src/tree/node.c index 568103e..b36feed 100644 --- a/src/tree/node.c +++ b/src/tree/node.c @@ -158,3 +158,15 @@ vieter_tree_error vieter_tree_node_remove(void **out, vieter_tree_node *root, return vieter_tree_ok; } + +void vieter_tree_node_set(vieter_tree_node *node, vieter_node_flag flag) { + node->flags |= flag; +} + +void vieter_tree_node_unset(vieter_tree_node *node, vieter_node_flag flag) { + node->flags &= ~flag; +} + +bool vieter_tree_node_get(vieter_tree_node *node, vieter_node_flag flag) { + return (node->flags & flag) != 0; +} diff --git a/src/tree/node.h b/src/tree/node.h index dc8cce0..2db2145 100644 --- a/src/tree/node.h +++ b/src/tree/node.h @@ -3,6 +3,13 @@ #include "vieter_tree.h" #include +#include + +#define VIETER_NODE_BLACK ((uint8_t)1) + +typedef enum vieter_node_flag { + vieter_node_black = ((uint8_t)1) << 0 +} vieter_node_flag; typedef struct vieter_tree_node { uint64_t key; @@ -10,6 +17,7 @@ typedef struct vieter_tree_node { struct vieter_tree_node *parent; struct vieter_tree_node *left; struct vieter_tree_node *right; + uint8_t flags; } vieter_tree_node; vieter_tree_node *vieter_tree_node_init(); @@ -25,4 +33,8 @@ vieter_tree_error vieter_tree_node_remove(void **out, vieter_tree_node *root, ui void vieter_tree_node_replace(vieter_tree_node *to_replace, vieter_tree_node *replacement); +void vieter_tree_node_set(vieter_tree_node *node, vieter_node_flag flag); +void vieter_tree_node_unset(vieter_tree_node *node, vieter_node_flag flag); +bool vieter_tree_node_get(vieter_tree_node *node, vieter_node_flag flag); + #endif