18 parser.setExampleLongOption(
"phoenix_mock_split --input=file.pmock --output=split.pmock");
19 parser.setExampleShortOption(
"phoenix_mock_split -i file2.mock file2.pmock -o split.pmock");
23 std::string defaultOutputFile(
"./split.pmock");
24 parser.addOption(
"output",
"o", defaultOutputFile,
"Name of the output split mock file");
26 size_t defaultOffset(0lu), defaultSizePart(1lu), defaultNbPart(0lu);
27 parser.addOption(
"offset",
"f", defaultOffset,
"Offset of the first message to be extracted in a split mock");
28 parser.addOption(
"sizepart",
"s", defaultSizePart,
"Size of each split part (number of messages in each part to be split)");
29 parser.addOption(
"nbpart",
"n", defaultNbPart,
"Number of output mock to be created (0 means automatic by respect to --offset and --sizepart)");
40 std::string extention(extentionFile);
44 return baseFileName +
"_" +
convertToString(indexFile) +
"." + extention;
55 bool splitMock(
const std::vector<std::string> & vecInputFile,
const std::string & outputFile,
56 size_t offsetPart,
size_t sizePart,
size_t nbPart)
58 if(sizePart == 0lu && nbPart == 0lu){
59 std::cerr <<
"Error sizePart cannot be 0 id nbPart == 0, aborting split" << std::endl;
64 for(std::vector<std::string>::const_iterator itFile(vecInputFile.begin()); itFile != vecInputFile.end() && b; ++itFile){
65 std::vector<std::vector<char> > vecTmpFile;
67 size_t nbMessageIn(vecTmpFile.size());
69 if(offsetPart <= nbMessageIn){
70 sizePart = (nbMessageIn - offsetPart)/nbPart;
72 std::cerr <<
"splitMock : cannot split nbMessageIn = " << nbMessageIn <<
", into nbPart = "<<nbPart<<
" of size sizePart = "<<sizePart<<
" and offset offsetPart = " << offsetPart << std::endl;
75 for(
size_t i(0lu); i < nbPart; ++i){
76 std::vector<std::vector<char> > vecMessage;
77 splitVecMessage(vecMessage, vecTmpFile, offsetPart + i*sizePart, sizePart);
82 std::vector<std::vector<char> > vecMessage;
87 }
else if(nbPart == 0lu){
88 if((sizePart + offsetPart) <= nbMessageIn){
89 nbPart = (nbMessageIn-offsetPart)/sizePart;
90 for(
size_t i(0lu); i < nbPart; ++i){
91 std::vector<std::vector<char> > vecMessage;
92 splitVecMessage(vecMessage, vecTmpFile, offsetPart + i*sizePart, sizePart);
96 std::vector<std::vector<char> > vecMessage;
101 if((sizePart*nbPart + offsetPart) <= nbMessageIn){
102 for(
size_t i(0lu); i < nbPart; ++i){
103 std::vector<std::vector<char> > vecMessage;
104 splitVecMessage(vecMessage, vecTmpFile, offsetPart + i*sizePart, sizePart);
108 std::cerr <<
"splitMock : cannot split nbMessageIn = " << nbMessageIn <<
", into nbPart = "<<nbPart<<
" of size sizePart = "<<sizePart<<
" and offset offsetPart = " << offsetPart << std::endl;
119 int main(
int argc,
char** argv){
121 parser.parseArgument(argc, argv);
124 std::vector<std::string> vecInputFile;
125 std::string outputFile(
"");
126 defaultMode.
getValue(vecInputFile,
"input");
127 defaultMode.
getValue(outputFile,
"output");
129 size_t offsetPart(0lu), sizePart(1lu), nbPart(0lu);
130 defaultMode.
getValue(offsetPart,
"offset");
131 defaultMode.
getValue(sizePart,
"sizepart");
132 defaultMode.
getValue(nbPart,
"nbpart");
134 return splitMock(vecInputFile, outputFile, offsetPart, sizePart, nbPart) - 1;