unsigned long individual_calc_size( individual_s * const individual ) { if( individual == NULL ) { fprintf( stderr, "bad parameter in individual_calc_size\n"); graceful_exit( EXIT_FAILURE ); } individual->tree_node_count = 0; // at least a root node individual->tree_terminal_count = 0; individual->tree_nonterminal_count = 0; unsigned long terminal_nodes = 0; unsigned long nonterminal_nodes = 0; node_calc_size( individual->tree_root_node, &terminal_nodes, &nonterminal_nodes ); individual->tree_node_count += terminal_nodes + nonterminal_nodes; individual->tree_terminal_count = terminal_nodes; individual->tree_nonterminal_count = nonterminal_nodes; return individual->tree_node_count; }
int node_calc_size (Node *node) { int size_sum = 0; int nodes = 0; if (strcmp(fixnullstring(node_get(node,"type")),"todo")) return -1; /* node has no completion status */ if (node_getval (node,"size") != -1) return node_getval (node,"size"); if (!node_right (node)) { /* leaf node */ if (node_getval (node,"size") != -1) return node_getval (node,"size"); else return 10; /* default size value */ } node = node_right (node); while (node) { switch (node_calc_complete (node)) { case -1: break; default: size_sum += node_calc_size (node); nodes++; break; } node = node_down (node); } if (nodes) return (size_sum); return 10; /* no of the children had any time,.. so we default to 1 */ }