Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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 */

}