Ejemplo n.º 1
0
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 );
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 4
0
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);
}