Graph::Graph(char *filename, char *filename_w, int type) { ifstream finput; finput.open(filename,fstream::in | fstream::binary); // Read number of nodes on 4 bytes finput.read((char *)&nb_nodes, 4); assert(finput.rdstate() == ios::goodbit); // Read cumulative degree sequence: 8 bytes for each node // cum_degree[0]=degree(0); cum_degree[1]=degree(0)+degree(1), etc. degrees.resize(nb_nodes); finput.read((char *)°rees[0], nb_nodes*8); // Read links: 4 bytes for each link (each link is counted twice) nb_links=degrees[nb_nodes-1]; links.resize(nb_links); finput.read((char *)(&links[0]), (long)nb_links*8); // IF WEIGHTED : read weights: 4 bytes for each link (each link is counted twice) weights.resize(0); total_weight=0; if (type==WEIGHTED) { ifstream finput_w; finput_w.open(filename_w,fstream::in | fstream::binary); weights.resize(nb_links); finput_w.read((char *)&weights[0], (long)nb_links*4); } // Compute total weight for (unsigned int i=0 ; i<nb_nodes ; i++) { total_weight += (double)weighted_degree(i); } }
Graph::Graph(char *filename, char *filename_w, int type) { ifstream finput; finput.open(filename,fstream::in | fstream::binary); if (finput.is_open() != true) { cerr << "The file " << filename << " does not exist" << endl; exit(EXIT_FAILURE); } // Read number of nodes on 4 bytes finput.read((char *)&nb_nodes, sizeof(int)); if (finput.rdstate() != ios::goodbit) { cerr << "The file " << filename << " is not a valid graph" << endl; exit(EXIT_FAILURE); } // Read cumulative degree sequence: 8 bytes for each node // cum_degree[0]=degree(0); cum_degree[1]=degree(0)+degree(1), etc. degrees.resize(nb_nodes); finput.read((char *)°rees[0], nb_nodes*sizeof(unsigned long long)); // Read links: 4 bytes for each link (each link is counted twice) nb_links = degrees[nb_nodes-1]; links.resize(nb_links); finput.read((char *)(&links[0]), nb_links*sizeof(int)); // IF WEIGHTED, read weights: 10 bytes for each link (each link is counted twice) weights.resize(0); total_weight = 0.0L; if (type==WEIGHTED) { ifstream finput_w; finput_w.open(filename_w,fstream::in | fstream::binary); if (finput_w.is_open() != true) { cerr << "The file " << filename_w << " does not exist" << filename << endl; exit(EXIT_FAILURE); } weights.resize(nb_links); finput_w.read((char *)(&weights[0]), nb_links*sizeof(long double)); if (finput_w.rdstate() != ios::goodbit) { cerr << "The file " << filename_w << " does not correspond to valid weights for the graph" << filename << endl; exit(EXIT_FAILURE); } } // Compute total weight for (int i=0 ; i<nb_nodes ; i++) total_weight += (long double)weighted_degree(i); nodes_w.assign(nb_nodes, 1); sum_nodes_w = nb_nodes; }