@@ -64,14 +64,19 @@ void printHeader(Util::prog_opts::variables_map vm)
6464// Evaluation Executor ---------------------------------------------------------
6565// //////////////////////////////////////////////////////////////////////////////
6666
67- EvalExecutor::EvalExecutor () : set_impl_( 0 )
67+ EvalExecutor::EvalExecutor () : scc_impl_( 1 )
6868{
6969 config_.add_options ()
7070 (" set_impl,s" , Util::prog_opts::value (&set_impl_),
7171 " Desired set implementation:"
7272 " \n - 0 for unordered sets (default option)"
7373 " \n - 1 for ordered sets"
7474 " \n - 2 for unidimensional ordered dense sets" )
75+ (" pw_impl,p" , Util::prog_opts::value (&pw_impl_),
76+ " Desired PWMap implementation:"
77+ " \n - 0 for unordered PWMaps (default option)"
78+ " \n - 1 for ordered PWMaps"
79+ " \n - 2 for domain ordered PWMaps" )
7580 (" scc_impl" , Util::prog_opts::value (&scc_impl_),
7681 " Desired SCC algorithm implementation:"
7782 " \n - 0 for V1 of minimum reachable SCC (default option)"
@@ -82,11 +87,32 @@ EvalExecutor::EvalExecutor() : set_impl_(0)
8287 visible_.add (generic_).add (config_);
8388}
8489
85- EvalUserInput EvalExecutor::gatherUserInput ()
90+ EvalUserInput EvalExecutor::chooseImplementation ()
8691{
8792 EvalUserInput result;
8893
89- result.set_set_impl (set_impl_);
94+ AutomImplVisitor autom_impl_visitor;
95+ std::streambuf* old_cout_buffer = std::cout.rdbuf ();
96+ std::cout.rdbuf (nullptr );
97+ EvalUserInput autom_impl = autom_impl_visitor.visit (Parser::parseFile (
98+ *input_file_));
99+ std::cout.rdbuf (old_cout_buffer);
100+
101+ result.set_set_impl (autom_impl.set_impl ());
102+ result.set_pw_impl (autom_impl.pw_impl ());
103+
104+ if (set_impl_) {
105+ if (set_impl_ > autom_impl.set_impl ())
106+ Util::ERROR (" Incompatible set implementation for the SBG input\n " );
107+
108+ result.set_set_impl (set_impl_);
109+ }
110+ if (pw_impl_) {
111+ if (pw_impl_ > autom_impl.pw_impl ())
112+ Util::ERROR (" Incompatible PW implementation for the SBG input\n " );
113+
114+ result.set_pw_impl (pw_impl_);
115+ }
90116 result.set_scc_impl (scc_impl_);
91117
92118 return result;
@@ -131,13 +157,7 @@ void EvalExecutor::execute(int arg_count, char* args[])
131157 // Input SBG program file handling -------------------------------------------
132158
133159 if (input_file_) {
134- AutomImplVisitor autom_impl;
135- std::streambuf* old_cout_buffer = std::cout.rdbuf ();
136- std::cout.rdbuf (nullptr );
137- autom_impl.visit (Parser::parseFile (*input_file_));
138- std::cout.rdbuf (old_cout_buffer);
139-
140- EvalUserInput input = gatherUserInput ();
160+ EvalUserInput input = chooseImplementation ();
141161 InputTranslator input_translator;
142162 input_translator.translate (input);
143163 ProgramIO eval_result = parseEvalFile (*input_file_);
0 commit comments