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());
 }
Exemple #3
0
    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);
    }
Exemple #4
0
 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);
 }
Exemple #5
0
 Edge(int u = -1, int v = -1, EdgeDataType edge_data = EdgeDataType())
     : u_(u), v_(v), edge_data_(edge_data) {}