13 #include<boost/program_options.hpp> 19 #include"../AutomataInterface.hh" 25 namespace Poptions = boost::program_options;
33 const string program(
"dd-insert");
34 const string briefcomment(
": this program gathers a set of automata as a unique automaton (raw insertion).");
49 Poptions::options_description & desc,
50 Poptions::variables_map & vm)
53 (
"help,h",
"produce help message")
54 (
"file,f", Poptions::value< std::vector<string> >(),
"automaton files (.ddaut/.aut format)")
55 (
"output,o", Poptions::value< string >(),
"outfile name (.ddaut/.aut format)")
57 Poptions::positional_options_description p;
60 Poptions::store(Poptions::command_line_parser(argc, argv).
options(desc).positional(p).run(), vm);
83 const std::string & output)
87 std::vector<AutFsm> automata;
89 automata.reserve(fileNames.size());
90 auto it = fileNames.begin();
91 while(it != fileNames.end())
93 ifstream file(it->c_str());
96 automata.emplace_back();
110 insertAutFsms(RangeAut(automata.begin(), automata.end()), result);
124 const std::string & output)
129 std::vector<DdAutFA> automata;
130 std::vector<DdAutStateManager> stateManagers;
131 std::vector<DdAutEventManager> eventManagers;
138 automata.reserve(fileNames.size());
139 stateManagers.reserve(fileNames.size());
140 eventManagers.reserve(fileNames.size());
142 auto it = fileNames.begin();
143 while(it != fileNames.end())
145 ifstream file(it->c_str());
148 automata.emplace_back();
149 stateManagers.emplace_back();
150 eventManagers.emplace_back();
152 stateManagers.back(),
153 eventManagers.back()}))
161 RangeDdAutSM(stateManagers.begin(),stateManagers.end()),
162 RangeDdAutEM(eventManagers.begin(),eventManagers.end()),
180 const std::string & output)
182 if(fileNames.empty())
188 std::for_each(fileNames.begin(), fileNames.end(),
189 [&](
const string & name)
195 if(!isDdAut && !isAut)
197 return printCommandLineError(
Msg(
"Expecting a list of filenames with a name all ending either with .ddaut or with .aut: check in the following list %1%")
198 %
toStream(fileNames.begin(), fileNames.end()));
204 return printCommandLineError(
Msg(
"As the input files are 'aut' files, I am expecting a .aut format as output but I read %1%")
215 return printCommandLineError(
Msg(
"As the input files are 'ddaut' files, I am expecting a .ddaut format as output but I read %1%")
234 std::vector<std::string> fileNames;
237 Poptions::options_description desc(
"Options");
238 Poptions::variables_map vm;
246 fileNames = vm[
"file"].as<std::vector < std::string >> ();
248 if(vm.count(
"output"))
250 output = vm[
"output"].as<std::string>();
253 catch(Poptions::required_option & e)
257 catch(Poptions::error & e)
size_t insertFsms(const std::vector< std::string > &fileNames, const std::string &output)
size_t writeAut(const Diades::Automata::Experimental::AutFsm &fsm, const std::string &output, const FileSuffixes &suffixes)
FileSuffixes suffixes({"ddaut", "aut"})
bool insertFiniteAutomata(DdAutFARange faRange, RangeDdAutSM smRange, RangeDdAutEM evRange, DdAutFA &result, DdAutStateManager &targetStateManager, DdAutEventManager &targetEventManager)
int main(int argc, char **argv)
StatePropertyManager< DdAutStateLabel, DdAutStateId > DdAutStateManager
const string briefcomment(": this program gathers a set of automata as a unique automaton (raw insertion).")
size_t writeFiniteAutomaton(const Diades::Automata::Experimental::ConstManagedDdAutFA &mfa, const std::string &output, const FileSuffixes &suffixes)
const size_t ERROR_UNHANDLED_EXCEPTION
size_t printCommandLineError(const string &msg)
bool faFromDdAutFile(std::istream &stream, const ManagedDdAutFA &mFa)
vector< string > options(numberOfOptions)
void initialiseOptions(int argc, char *argv[], Poptions::options_description &desc, Poptions::variables_map &vm)
const string program("dd-insert")
bool match(const std::string &fileName, const std::string &suffix) const
size_t insertAuts(const std::vector< std::string > &fileNames, const std::string &output)
bool insertAutFsms(AutFsmRange range, AutFsm &output)
Diades::Utils::ToStream< InputIterator, Diades::Utils::AlwaysTrue< typename InputIterator::reference > > toStream(InputIterator first, InputIterator last)
EventManager< DdAutEventLabel, DdAutEventId > DdAutEventManager
size_t insertDdAuts(const std::vector< std::string > &fileNames, const std::string &output)
bool fromAutFile(std::istream &stream, AutFsm &fsm)
StateMachine< DdAutStateId, DdAutEventId > DdAutFsm
void printUsage(const po::options_description &desc)