static void create_vertices(GtTypeGraph *type_graph) { GtUword i, j; GtTypeNode *parent; const char *id; gt_assert(type_graph && !type_graph->ready); /* iterate over nodes */ for (i = 0; i < gt_array_size(type_graph->nodes); i++) { GtTypeNode *node = *(GtTypeNode**) gt_array_get(type_graph->nodes, i); /* process is_a parents */ for (j = 0; j < gt_type_node_is_a_size(node); j++) { id = gt_type_node_is_a_get(node, j); parent = gt_hashmap_get(type_graph->nodemap, id); gt_assert(parent); gt_type_node_add_is_a_vertex(node, parent); } /* process part_of parents */ for (j = 0; j < gt_type_node_part_of_size(node); j++) { id = gt_type_node_part_of_get(node, j); parent = gt_hashmap_get(type_graph->nodemap, id); gt_assert(parent); gt_bool_matrix_set(type_graph->part_of_out_edges, gt_type_node_num(node), gt_type_node_num(parent), true); gt_bool_matrix_set(type_graph->part_of_in_edges, gt_type_node_num(parent), gt_type_node_num(node), true); } } }
const char* gt_type_node_part_of_get(const GtTypeNode *type_node, unsigned long idx) { gt_assert(type_node && idx < gt_type_node_part_of_size(type_node)); return *(const char**) gt_array_get(type_node->part_of_list, idx); }