chore(tree): some small cleanups
							parent
							
								
									bee520a781
								
							
						
					
					
						commit
						ef5037f941
					
				|  | @ -1,5 +1,6 @@ | ||||||
| #include "vieter_tree_internal.h" | #include "vieter_tree_internal.h" | ||||||
| #include "vieter_tree_node.h" | #include "vieter_tree_node.h" | ||||||
|  | #include "vieter_tree_balancing.h" | ||||||
| 
 | 
 | ||||||
| struct vieter_tree { | struct vieter_tree { | ||||||
|   uint64_t size; |   uint64_t size; | ||||||
|  |  | ||||||
|  | @ -46,13 +46,6 @@ void vieter_tree_node_set_child(vieter_tree_node *parent, | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void vieter_tree_node_replace_with_child(vieter_tree_node *to_replace, |  | ||||||
|                                          vieter_tree_node *replacement) { |  | ||||||
|   to_replace->key = replacement->key; |  | ||||||
|   to_replace->data = replacement->data; |  | ||||||
|   vieter_tree_node_set_children(to_replace, replacement->children); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| vieter_tree_error vieter_tree_node_insert(vieter_tree_node *root, uint64_t key, | vieter_tree_error vieter_tree_node_insert(vieter_tree_node *root, uint64_t key, | ||||||
|                                           void *data) { |                                           void *data) { | ||||||
|   vieter_tree_node *node = root; |   vieter_tree_node *node = root; | ||||||
|  |  | ||||||
|  | @ -20,10 +20,19 @@ typedef struct vieter_tree_node { | ||||||
|     uint8_t flags; |     uint8_t flags; | ||||||
| } vieter_tree_node; | } vieter_tree_node; | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Allocate a new node. | ||||||
|  |  */ | ||||||
| vieter_tree_node *vieter_tree_node_init(); | vieter_tree_node *vieter_tree_node_init(); | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Free an allocated node. | ||||||
|  |  */ | ||||||
| void vieter_tree_node_free(vieter_tree_node *node); | void vieter_tree_node_free(vieter_tree_node *node); | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Insert a new key into the given tree. | ||||||
|  |  */ | ||||||
| vieter_tree_error vieter_tree_node_insert(vieter_tree_node *root, uint64_t key, void *data); | vieter_tree_error vieter_tree_node_insert(vieter_tree_node *root, uint64_t key, void *data); | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -31,20 +40,41 @@ vieter_tree_error vieter_tree_node_insert(vieter_tree_node *root, uint64_t key, | ||||||
|  */ |  */ | ||||||
| vieter_tree_error vieter_tree_node_search_node(vieter_tree_node **out, vieter_tree_node *root, uint64_t key); | vieter_tree_error vieter_tree_node_search_node(vieter_tree_node **out, vieter_tree_node *root, uint64_t key); | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Search for the data represented by the given key. | ||||||
|  |  */ | ||||||
| vieter_tree_error vieter_tree_node_search(void **out, vieter_tree_node *root, uint64_t key); | vieter_tree_error vieter_tree_node_search(void **out, vieter_tree_node *root, uint64_t key); | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Remove the data associated with the given key. | ||||||
|  |  */ | ||||||
| vieter_tree_error vieter_tree_node_remove(void **out, vieter_tree_node **root_ptr, uint64_t key); | vieter_tree_error vieter_tree_node_remove(void **out, vieter_tree_node **root_ptr, uint64_t key); | ||||||
| 
 | 
 | ||||||
| void vieter_tree_node_replace_with_child(vieter_tree_node *to_replace, vieter_tree_node *replacement); | /*
 | ||||||
| 
 |  * Set a node's bit flag to the given value. | ||||||
|  |  */ | ||||||
| void vieter_tree_node_set(vieter_tree_node *node, vieter_tree_node_flag flag, bool value); | void vieter_tree_node_set(vieter_tree_node *node, vieter_tree_node_flag flag, bool value); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Get whether a node's bit flag is set. | ||||||
|  |  */ | ||||||
| bool vieter_tree_node_get(vieter_tree_node *node, vieter_tree_node_flag flag); | bool vieter_tree_node_get(vieter_tree_node *node, vieter_tree_node_flag flag); | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Add a new child to the parent, replacing either its left or right child, | ||||||
|  |  * depending on the key values. | ||||||
|  |  */ | ||||||
| void vieter_tree_node_add_child(vieter_tree_node *parent, uint64_t key, | void vieter_tree_node_add_child(vieter_tree_node *parent, uint64_t key, | ||||||
|                                 vieter_tree_node *child); |                                 vieter_tree_node *child); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Replace a node's children array. | ||||||
|  |  */ | ||||||
| void vieter_tree_node_set_children(vieter_tree_node *parent, vieter_tree_node **children); | void vieter_tree_node_set_children(vieter_tree_node *parent, vieter_tree_node **children); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Set a node's left or right child to the given node. | ||||||
|  |  */ | ||||||
| void vieter_tree_node_set_child(vieter_tree_node *parent, vieter_tree_node *child, bool right); | void vieter_tree_node_set_child(vieter_tree_node *parent, vieter_tree_node *child, bool right); | ||||||
| 
 | 
 | ||||||
| bool vieter_tree_node_validate(vieter_tree_node *node, uint64_t passed_black_nodes, uint64_t expected_black_nodes); |  | ||||||
| 
 |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -65,7 +65,7 @@ void test_rotate_left() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| TEST_LIST = { | TEST_LIST = { | ||||||
|     {"tree tree rotate right", test_rotate_right}, |     {"tree rotate right", test_rotate_right}, | ||||||
|     {"tree tree rotate left", test_rotate_left}, |     {"tree rotate left", test_rotate_left}, | ||||||
|     {NULL, NULL} |     {NULL, NULL} | ||||||
| }; | }; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue