From: Michael Tremer Date: Fri, 5 Jan 2018 16:25:46 +0000 (+0000) Subject: network: Implement function to count all nodes X-Git-Tag: 0.9.0~130 X-Git-Url: http://git.ipfire.org/?p=people%2Fms%2Flibloc.git;a=commitdiff_plain;h=940f9c2b5abe338288c68cd3e24f24d615978ce0 network: Implement function to count all nodes Signed-off-by: Michael Tremer --- diff --git a/src/libloc.sym b/src/libloc.sym index 4026939..bdccb70 100644 --- a/src/libloc.sym +++ b/src/libloc.sym @@ -32,6 +32,8 @@ global: # Network Tree loc_network_tree_add_network; + loc_network_tree_count_networks; + loc_network_tree_count_nodes; loc_network_tree_dump; loc_network_tree_new; loc_network_tree_unref; diff --git a/src/loc/network.h b/src/loc/network.h index 32e3091..71e31c1 100644 --- a/src/loc/network.h +++ b/src/loc/network.h @@ -48,5 +48,6 @@ int loc_network_tree_walk(struct loc_network_tree* tree, int loc_network_tree_dump(struct loc_network_tree* tree); int loc_network_tree_add_network(struct loc_network_tree* tree, struct loc_network* network); size_t loc_network_tree_count_networks(struct loc_network_tree* tree); +size_t loc_network_tree_count_nodes(struct loc_network_tree* tree); #endif diff --git a/src/network.c b/src/network.c index d34f881..7c7a819 100644 --- a/src/network.c +++ b/src/network.c @@ -527,3 +527,19 @@ LOC_EXPORT size_t loc_network_tree_count_networks(struct loc_network_tree* tree) return counter; } + +static size_t __loc_network_tree_count_nodes(struct loc_network_tree_node* node) { + size_t counter = 1; + + if (node->zero) + counter += __loc_network_tree_count_nodes(node->zero); + + if (node->one) + counter += __loc_network_tree_count_nodes(node->one); + + return counter; +} + +LOC_EXPORT size_t loc_network_tree_count_nodes(struct loc_network_tree* tree) { + return __loc_network_tree_count_nodes(tree->root); +} diff --git a/src/test-network.c b/src/test-network.c index b309d45..665b338 100644 --- a/src/test-network.c +++ b/src/test-network.c @@ -67,6 +67,9 @@ int main(int argc, char** argv) { exit(EXIT_FAILURE); } + size_t nodes = loc_network_tree_count_nodes(tree); + printf("The tree has %zu nodes\n", nodes); + // Create a database struct loc_writer* writer; err = loc_writer_new(ctx, &writer);