From 01ea2597d922774ff641d6a2eacae22979d68802 Mon Sep 17 00:00:00 2001 From: Joe Zhao Date: Fri, 22 May 2015 11:31:25 +0800 Subject: added shuffle option --- split.cpp | 14 +++++++++++--- tools/fileDataProvider.cpp | 8 ++++---- tools/fileDataProvider.h | 9 +++++++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/split.cpp b/split.cpp index be80545..e774ea9 100644 --- a/split.cpp +++ b/split.cpp @@ -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(), "take number") ("take,a", po::value(), "set output rid file 1(taken)") ("left,b", po::value(), "set output rid file 2(left)") @@ -68,9 +69,16 @@ int main(int argc, char **argv) vector a; vector b; dp.open(); - dp.take(vm["count"].as(),a,b); - outputRid(a,dp.getfSize(),vm["take"].as()); - outputRid(b,dp.getfSize(),vm["left"].as()); + if (vm.count("shuffle")) { + dp.getRidVector(a); + dp.shuffle(a); + outputRid(a, dp.getfSize(), vm["take"].as()); + } + else { + dp.take(vm["count"].as(), a, b); + outputRid(a, dp.getfSize(), vm["take"].as()); + outputRid(b, dp.getfSize(), vm["left"].as()); + } 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 &dat) +void RidFileDP::shuffle(vector &dat) { DataEntry* e; int sz=(int)dat.size(); @@ -148,7 +148,7 @@ void RidFileDP::take(int n,vector &a,vector &b) a.clear(); b.clear(); std::vector &dat = d.getData(); - scrambler(tmp); + shuffle(tmp); for (int i=0;i &a,vector &b) for (int i=0;i &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 &a,std::vector &b); + void getRidVector(std::vector &rid){ + if (!read) + readEntries(); + rid.clear(); + std::vector &dat = d.getData(); + for (int i=0;i