void dependency_tree::init( std::map<mod_id, std::vector<mod_id> > key_dependency_map ) { build_node_map( key_dependency_map ); build_connections( key_dependency_map ); }
void write_squished_dawg (const char *filename, EDGE_ARRAY dawg, inT32 max_num_edges, inT32 reserved_edges) { FILE *file; EDGE_REF edge; inT32 num_edges; inT32 node_count = 0; NODE_MAP node_map; EDGE_REF old_index; uinT32 temp_record_32; if (debug) print_string ("write_squished_dawg"); node_map = build_node_map (dawg, &node_count, FALSE, max_num_edges, reserved_edges); #ifdef WIN32 file = open_file(filename, "wb"); #else file = open_file(filename, "w"); #endif num_edges = 0; /* Count number of edges */ for (edge=0; edge<max_num_edges; edge++) if (forward_edge (dawg, edge)) num_edges++; num_edges = htonl(num_edges); fwrite (&num_edges, sizeof (inT32), 1, file); /* Write edge count to file */ num_edges = ntohl(num_edges); printf ("%d nodes in DAWG\n", node_count); printf ("%d edges in DAWG\n", num_edges); if (num_edges > MAX_NUM_EDGES_IN_SQUISHED_DAWG_FILE) { cprintf("Error: squished DAWG is too big to be written (%d edges > %d).\n", num_edges, MAX_NUM_EDGES_IN_SQUISHED_DAWG_FILE); exit(1); } for (edge=0; edge<max_num_edges; edge++) { /* Write forward edges */ if (forward_edge (dawg, edge)) { do { old_index = next_node (dawg,edge); set_next_edge (dawg, edge, node_map [next_node (dawg, edge)]); temp_record_32 = htonl((uinT32) edge_of (dawg,edge)); fwrite (&temp_record_32, sizeof (uinT32), 1, file); set_next_edge (dawg, edge, old_index); } edge_loop (dawg, edge); if (backward_edge (dawg, edge)) /* Skip back links */ edge_loop (dawg, edge); edge--; } } free (node_map); fclose (file); }
void dependency_tree::init(std::map<std::string, std::vector<std::string> > key_dependency_map) { build_node_map(key_dependency_map); build_connections(key_dependency_map); }
void compact_dawg (EDGE_ARRAY dawg, inT32 max_num_edges, inT32 reserved_edges) { EDGE_REF edge; inT32 num_edges = 0; NODE_REF next_node_space; NODE_REF node = 0; NODE_REF destination; inT32 node_count; NODE_MAP node_map; NODE_REF the_next_node; if (max_new_attempts < NUM_PLACEMENT_ATTEMPTS / 10) return; max_new_attempts = 0; print_string ("Compacting the DAWG"); node_map = build_node_map (dawg, &node_count, TRUE, max_num_edges, reserved_edges); edge = 0; next_node_space = reserved_edges; while (edge < max_num_edges) { /* Found a node ? */ if (forward_edge (dawg, edge)) { node = edge; num_edges = edges_in_node (dawg, node); /* Move the edges */ if (node != 0) { destination = next_node_space; if (node != next_node_space) move_edges (dawg, node, next_node_space, num_edges); } else { destination = 0; } /* Should be moved */ if (debug) cprintf ("Compacting node from " REFFORMAT " to " REFFORMAT \ " (%d)\n", node, destination, num_edges); for (edge = destination; edge < destination + num_edges; edge++) { the_next_node = next_node (dawg, edge); assert (the_next_node >= 0 && the_next_node < max_num_edges && node_map [the_next_node] >= 0 && node_map [the_next_node] < max_num_edges); /* Map each edge in node */ if (debug) cprintf (" " REFFORMAT " --> ", next_node (dawg, edge)); set_next_edge (dawg, edge, node_map [next_node (dawg, edge)]); if (debug) cprintf (REFFORMAT "\n", next_node (dawg, edge)); } if (destination != 0) next_node_space = edge; edge = node + num_edges; } else { edge++; } } cprintf ("Compacting node from " REFFORMAT " to " REFFORMAT " (%d)\n", node, next_node_space, num_edges); free (node_map); }