void read_edges(Callback * callback) { size_t nedges = 0; /* Note, header has been read in the beginning */ do { if (nedges % 10000000 == 0) { logstream(LOG_DEBUG) << (fpos * 1.0 / total_to_process * 100) << "%" << std::endl; } vid_t from; vid_t to; int adjlen; EdgeDataType val = EdgeDataType(); from = read_val<vid_t>(); adjlen = (int) read_val<uint8_t>(); assert(adjlen > 0); for(int i=0; i < adjlen; i++) { to = read_val<vid_t>(); if (header.contains_edge_values) { val = read_val<EdgeDataType>(); } callback->receive_edge(from, to, val); nedges++; } } while (nedges < header.numedges); }
void add_edge(vid_t from, vid_t to) { if (!initialized) { header.contains_edge_values = false; initialized = true; } if (header.contains_edge_values) { logstream(LOG_ERROR) << "Tried to add edge without a value, although previously added edge with a value!" << std::endl; } assert(!header.contains_edge_values); _addedge(from, to, EdgeDataType()); }
void convert_adjlist(std::string inputfile, sharder<EdgeDataType> &sharderobj) { FILE * inf = fopen(inputfile.c_str(), "r"); if (inf == NULL) { logstream(LOG_FATAL) << "Could not load :" << inputfile << " error: " << strerror(errno) << std::endl; } assert(inf != NULL); logstream(LOG_INFO) << "Reading in adjacency list format!" << std::endl; int maxlen = 100000000; char * s = (char*) malloc(maxlen); size_t bytesread = 0; char delims[] = " \t"; size_t linenum = 0; size_t lastlog = 0; /*** PHASE 1 - count ***/ while(fgets(s, maxlen, inf) != NULL) { linenum++; if (bytesread - lastlog >= 500000000) { logstream(LOG_DEBUG) << "Read " << linenum << " lines, " << bytesread / 1024 / 1024. << " MB" << std::endl; lastlog = bytesread; } FIXLINE(s); bytesread += strlen(s); if (s[0] == '#') continue; // Comment if (s[0] == '%') continue; // Comment char * t = strtok(s, delims); vid_t from = atoi(t); t = strtok(NULL,delims); if (t != NULL) { vid_t num = atoi(t); vid_t i = 0; while((t = strtok(NULL,delims)) != NULL) { vid_t to = atoi(t); if (from != to) { sharderobj.preprocessing_add_edge(from, to, EdgeDataType()); } i++; } if (num != i) logstream(LOG_ERROR) << "Mismatch when reading adjacency list: " << num << " != " << i << " s: " << std::string(s) << " on line: " << linenum << std::endl; assert(num == i); } } free(s); }
void convert_edgelist(std::string inputfile, sharder<EdgeDataType> &sharderobj) { FILE * inf = fopen(inputfile.c_str(), "r"); size_t bytesread = 0; size_t linenum = 0; if (inf == NULL) { logstream(LOG_FATAL) << "Could not load :" << inputfile << " error: " << strerror(errno) << std::endl; } assert(inf != NULL); logstream(LOG_INFO) << "Reading in edge list format!" << std::endl; char s[1024]; while(fgets(s, 1024, inf) != NULL) { linenum++; if (linenum % 10000000 == 0) { logstream(LOG_DEBUG) << "Read " << linenum << " lines, " << bytesread / 1024 / 1024. << " MB" << std::endl; } FIXLINE(s); bytesread += strlen(s); if (s[0] == '#') continue; // Comment if (s[0] == '%') continue; // Comment char delims[] = "\t "; char * t; t = strtok(s, delims); vid_t from = atoi(t); t = strtok(NULL, delims); vid_t to = atoi(t); /* Check if has value */ t = strtok(NULL, delims); EdgeDataType val; if (t != NULL) { parse(val, (const char*) t); } else { val = EdgeDataType(); } if (from != to) { sharderobj.preprocessing_add_edge(from, to, val); } } fclose(inf); }
Edge(int u = -1, int v = -1, EdgeDataType edge_data = EdgeDataType()) : u_(u), v_(v), edge_data_(edge_data) {}