diff options
| -rw-r--r-- | split.cpp | 14 | ||||
| -rw-r--r-- | tools/fileDataProvider.cpp | 8 | ||||
| -rw-r--r-- | tools/fileDataProvider.h | 9 | 
3 files changed, 24 insertions, 7 deletions
@@ -43,6 +43,7 @@ int main(int argc, char **argv)      desc.add_options()              ("help,h", "produce help message")              ("query,Q", "Query person count") +            ("shuffle,s","shuffle input")              ("count,c", po::value<int>(), "take number")              ("take,a", po::value<string>(), "set output rid file 1(taken)")              ("left,b", po::value<string>(), "set output rid file 2(left)") @@ -68,9 +69,16 @@ int main(int argc, char **argv)      vector<DataEntry*> a;      vector<DataEntry*> b;      dp.open(); -    dp.take(vm["count"].as<int>(),a,b); -    outputRid(a,dp.getfSize(),vm["take"].as<string>()); -    outputRid(b,dp.getfSize(),vm["left"].as<string>()); +    if (vm.count("shuffle")) { +        dp.getRidVector(a); +        dp.shuffle(a); +        outputRid(a, dp.getfSize(), vm["take"].as<string>()); +    } +    else { +        dp.take(vm["count"].as<int>(), a, b); +        outputRid(a, dp.getfSize(), vm["take"].as<string>()); +        outputRid(b, dp.getfSize(), vm["left"].as<string>()); +    }      dp.close();      return 0;  }
\ No newline at end of file diff --git a/tools/fileDataProvider.cpp b/tools/fileDataProvider.cpp index b1f3f5e..9be1132 100644 --- a/tools/fileDataProvider.cpp +++ b/tools/fileDataProvider.cpp @@ -124,7 +124,7 @@ int RidFileDP::getpSize() {      return p.size();  }; -void scrambler(vector<DataEntry*> &dat) +void RidFileDP::shuffle(vector<DataEntry*> &dat)  {      DataEntry* e;      int sz=(int)dat.size(); @@ -148,7 +148,7 @@ void RidFileDP::take(int n,vector<DataEntry*> &a,vector<DataEntry*> &b)      a.clear();      b.clear();      std::vector<DataEntry*> &dat = d.getData(); -    scrambler(tmp); +    shuffle(tmp);      for (int i=0;i<dat.size();++i)          tmp.push_back(dat[i]);      int pos = 0; @@ -170,8 +170,8 @@ void RidFileDP::take(int n,vector<DataEntry*> &a,vector<DataEntry*> &b)      for (int i=0;i<tmp.size();++i)          if (tmp[i]!=NULL)              b.push_back(tmp[i]); -    scrambler(a); -    scrambler(b); +    shuffle(a); +    shuffle(b);  }  void RidFileDP::getAllDataSet(RidList &out){ diff --git a/tools/fileDataProvider.h b/tools/fileDataProvider.h index 567c8e2..972a4c5 100644 --- a/tools/fileDataProvider.h +++ b/tools/fileDataProvider.h @@ -38,11 +38,20 @@ public:      void readEntries();      int getfSize() { if(!read) readEntries(); return d.getfSize();};      int getpSize(); +    void shuffle(std::vector<DataEntry*> &dat);      virtual void getAllDataSet(RidList &out);      virtual int getDataSet(DataList &out);      virtual int open(){fin.open(fname); eof=false;return 0;};      virtual int close(){fin.close(); d.clear();return 0;};      void take(int n,std::vector<DataEntry*> &a,std::vector<DataEntry*> &b); +    void getRidVector(std::vector<DataEntry*> &rid){ +        if (!read) +            readEntries(); +        rid.clear(); +        std::vector<DataEntry*> &dat = d.getData(); +        for (int i=0;i<dat.size();++i) +            rid.push_back(dat[i]); +    }  };  #endif
\ No newline at end of file  | 
