Ignore:
Timestamp:
Mar 10, 2016, 2:38:50 PM (3 years ago)
Author:
lindanl
Message:

Multiple input files can run on separate threads.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/toolchain.cpp

    r4964 r4967  
    470470}
    471471
    472 int total_count = 0;
     472
     473
     474int * total_count;
     475std::stringstream * resultStrs;
     476std::vector<std::string> inputFiles;
     477
     478void initResult(std::vector<std::string> filenames, const int n){
     479
     480    inputFiles = filenames;
     481
     482    std::stringstream * ss = new std::stringstream[n];
     483    resultStrs = ss;
     484
     485    int * c = new int[n];
     486    total_count = c;
     487    for (int i=1; i<inputFiles.size(); i++){
     488        total_count[i-1] = 0;
     489    }
     490
     491}
    473492
    474493extern "C" {
    475494    void wrapped_report_match(uint64_t lineNum, uint64_t line_start, uint64_t line_end, const char * buffer, int filesize, char * filename) {
     495       
     496        int idx = 0;
     497        for (int i=1; i<inputFiles.size(); i++){
     498            if (inputFiles[i] == filename){
     499                idx = i-1;
     500                break;
     501            }
     502        }
     503
    476504        if(CountOnly){
    477             total_count++;
     505            total_count[idx]++;
    478506            return;
    479507        }
    480508
    481         llvm::raw_os_ostream out(std::cout);
    482509        if (ShowFileNames) {
    483             out << filename << ':';
     510            resultStrs[idx] << filename << ':';
    484511        }
    485512        if (ShowLineNumbers) {
    486             out << lineNum << ":";
     513            resultStrs[idx] << lineNum << ":";
    487514        }
    488515
     
    493520        if (line_end == filesize) {
    494521            // The match position is at end-of-file.   We have a final unterminated line.
    495             out.write(&buffer[line_start], line_end - line_start);
     522            resultStrs[idx].write(&buffer[line_start], line_end - line_start);
    496523            if (NormalizeLineBreaks) {
    497                 out << '\n';  // terminate it
     524                resultStrs[idx] << '\n';  // terminate it
    498525            }
    499526            return;
     
    508535                line_end -= 2;
    509536            }
    510             out.write(&buffer[line_start], line_end - line_start);
    511             out << '\n';
     537            resultStrs[idx].write(&buffer[line_start], line_end - line_start);
     538            resultStrs[idx] << '\n';
    512539        }
    513540        else{   
     
    520547                }
    521548            }
    522             out.write(&buffer[line_start], line_end - line_start + 1);
    523         }
    524     }
    525 }
    526 
    527 
    528 void PrintTotalCount(){
     549            resultStrs[idx].write(&buffer[line_start], line_end - line_start + 1);
     550        }
     551    }
     552}
     553
     554void PrintResult(){
    529555    if(CountOnly){
    530         std::cout << total_count << std::endl;
     556        for (int i=1; i<inputFiles.size(); i++){
     557            std::cout << total_count[i-1] << std::endl;
     558        }
     559        return;
     560    }
     561
     562    std::string out;
     563    for (int i=1; i<inputFiles.size(); i++){
     564        std::cout << resultStrs[i-1].str();
    531565    }
    532566}
Note: See TracChangeset for help on using the changeset viewer.