]> git.ipfire.org Git - people/ms/libloc.git/commitdiff
network: Implement function to count all nodes
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 5 Jan 2018 16:25:46 +0000 (16:25 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 5 Jan 2018 16:25:46 +0000 (16:25 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libloc.sym
src/loc/network.h
src/network.c
src/test-network.c

index 40269399166a554cdd1cbd2024e4677afd54e87c..bdccb707b4d38afc060027b77714d9f3a307f50a 100644 (file)
@@ -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;
index 32e3091f2a0d3dd2b0bc739ef41650ac103553be..71e31c176a44d0b1edf6f99e1e5c63f74f58979e 100644 (file)
@@ -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
index d34f881e1ac4f616c31fd464680e4790dac04228..7c7a819ba7fde5bc12c9ef74321e12c3080d8311 100644 (file)
@@ -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);
+}
index b309d453ffb61ecf9bb5d7bc4dc4992345dc27fe..665b33836fb291f31a0584fe067b65b450cc1142 100644 (file)
@@ -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);