extern int stats_tree_create_range_node_string(stats_tree *st, const gchar *name, int parent_id, int num_str_ranges, gchar** str_ranges) { int i; stat_node *rng_root = new_stat_node(st, name, parent_id, FALSE, TRUE); stat_node *range_node = NULL; for (i = 0; i < num_str_ranges; i++) { range_node = new_stat_node(st, str_ranges[i], rng_root->id, FALSE, FALSE); range_node->rng = get_range(str_ranges[i]); } return rng_root->id; }
/* * Increases by delta the counter of the node whose name is given * if the node does not exist yet it's created (with counter=1) * using parent_name as parent node. * with_hash=TRUE to indicate that the created node will have a parent */ extern int stats_tree_manip_node(manip_node_mode mode, stats_tree *st, const char *name, int parent_id, gboolean with_hash, gint value) { stat_node *node = NULL; stat_node *parent = NULL; g_assert( parent_id >= 0 && parent_id < (int) st->parents->len ); parent = (stat_node *)g_ptr_array_index(st->parents,parent_id); if( parent->hash ) { node = (stat_node *)g_hash_table_lookup(parent->hash,name); } else { node = (stat_node *)g_hash_table_lookup(st->names,name); } if ( node == NULL ) node = new_stat_node(st,name,parent_id,with_hash,with_hash); switch (mode) { case MN_INCREASE: node->counter += value; break; case MN_SET: node->counter = value; break; } if (node) return node->id; else return -1; }
extern int stats_tree_create_range_node(stats_tree *st, const gchar *name, int parent_id, ...) { va_list list; gchar *curr_range; stat_node *rng_root = new_stat_node(st, name, parent_id, FALSE, TRUE); stat_node *range_node = NULL; va_start( list, parent_id ); while (( curr_range = va_arg(list, gchar*) )) { range_node = new_stat_node(st, curr_range, rng_root->id, FALSE, FALSE); range_node->rng = get_range(curr_range); } va_end( list ); return rng_root->id; }
extern int stats_tree_create_pivot(stats_tree *st, const gchar *name, int parent_id) { stat_node *node = new_stat_node(st,name,parent_id,TRUE,TRUE); if (node) return node->id; else return 0; }
extern int stats_tree_create_node(stats_tree *st, const gchar *name, int parent_id, gboolean with_hash) { stat_node *node = new_stat_node(st,name,parent_id,with_hash,TRUE); if (node) return node->id; else return 0; }
/* * Increases by delta the counter of the node whose name is given * if the node does not exist yet it's created (with counter=1) * using parent_name as parent node. * with_hash=TRUE to indicate that the created node will have a parent */ extern int stats_tree_manip_node(manip_node_mode mode, stats_tree *st, const char *name, int parent_id, gboolean with_hash, gint value) { stat_node *node = NULL; stat_node *parent = NULL; g_assert( parent_id >= 0 && parent_id < (int) st->parents->len ); parent = (stat_node *)g_ptr_array_index(st->parents,parent_id); if( parent->hash ) { node = (stat_node *)g_hash_table_lookup(parent->hash,name); } else { node = (stat_node *)g_hash_table_lookup(st->names,name); } if ( node == NULL ) node = new_stat_node(st,name,parent_id,with_hash,with_hash); switch (mode) { case MN_INCREASE: node->counter += value; update_burst_calc(node, value); break; case MN_SET: node->counter = value; break; case MN_AVERAGE: node->counter++; update_burst_calc(node, 1); /* fall through to average code */ case MN_AVERAGE_NOTICK: node->total += value; if (node->minvalue > value) { node->minvalue = value; } if (node->maxvalue < value) { node->maxvalue = value; } node->st_flags |= ST_FLG_AVERAGE; break; case MN_SET_FLAGS: node->st_flags |= value; break; case MN_CLEAR_FLAGS: node->st_flags &= ~value; break; } if (node) return node->id; else return -1; }
extern int stats_tree_create_pivot_by_pname(stats_tree *st, const gchar *name, const gchar *parent_name) { int parent_id = stats_tree_parent_id_by_name(st,parent_name); stat_node *node; node = new_stat_node(st,name,parent_id,TRUE,TRUE); if (node) return node->id; else return 0; }