diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc index 09a05a7cf432281709e6bfec73835023e667cf97..0d578450ef43906637a219a0d1f05c6a26d910e6 100644 --- a/src/ComputingTasks.cc +++ b/src/ComputingTasks.cc @@ -3266,10 +3266,10 @@ ConditionalForecastStatement::writeJsonOutput(ostream &output) const output << "}"; } -PlotConditionalForecastStatement::PlotConditionalForecastStatement(int periods_arg, +PlotConditionalForecastStatement::PlotConditionalForecastStatement(optional<int> periods_arg, SymbolList symbol_list_arg, const SymbolTable &symbol_table_arg) : - periods{periods_arg}, + periods{move(periods_arg)}, symbol_list{move(symbol_list_arg)}, symbol_table{symbol_table_arg} { @@ -3294,17 +3294,18 @@ void PlotConditionalForecastStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const { symbol_list.writeOutput("var_list_", output); - if (periods == -1) - output << "plot_icforecast(var_list_,[],options_,oo_);" << endl; + if (periods) + output << "plot_icforecast(var_list_, " << *periods << ",options_,oo_);" << endl; else - output << "plot_icforecast(var_list_, " << periods << ",options_,oo_);" << endl; + output << "plot_icforecast(var_list_,[],options_,oo_);" << endl; } void PlotConditionalForecastStatement::writeJsonOutput(ostream &output) const { - output << R"({"statementName": "plot_conditional_forecast", )" - << R"("periods": )" << periods; + output << R"({"statementName": "plot_conditional_forecast")"; + if (periods) + output << R"(, "periods": )" << *periods; if (!symbol_list.empty()) { output << ", "; diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh index e7502f650baddc01de5e89e5c4ac12f6b205ee1c..d378ca079de0551da4dbaddf9841529cbd5907e4 100644 --- a/src/ComputingTasks.hh +++ b/src/ComputingTasks.hh @@ -21,6 +21,7 @@ #define _COMPUTINGTASKS_HH #include <ostream> +#include <optional> #include "SymbolList.hh" #include "SymbolTable.hh" @@ -848,12 +849,11 @@ public: class PlotConditionalForecastStatement : public Statement { private: - //! A value of -1 indicates that the user didn't specify a value - const int periods; + const optional<int> periods; // The user is allowed not to declare periods const SymbolList symbol_list; const SymbolTable &symbol_table; public: - PlotConditionalForecastStatement(int periods_arg, SymbolList symbol_list_arg, + PlotConditionalForecastStatement(optional<int> periods_arg, SymbolList symbol_list_arg, const SymbolTable &symbol_table_arg); void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; diff --git a/src/DynareBison.yy b/src/DynareBison.yy index 42c53d9215d8758b54799467bd5fd1038c64fd51..3ebfb6879624f67f011333a83e5ac9c251a1367a 100644 --- a/src/DynareBison.yy +++ b/src/DynareBison.yy @@ -3213,7 +3213,7 @@ conditional_forecast_option : o_periods ; plot_conditional_forecast : PLOT_CONDITIONAL_FORECAST symbol_list ';' - { driver.plot_conditional_forecast("", $2); } + { driver.plot_conditional_forecast(nullopt, $2); } | PLOT_CONDITIONAL_FORECAST '(' PERIODS EQUAL INT_NUMBER ')' symbol_list ';' { driver.plot_conditional_forecast($5, $7); } ; diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc index f43dedc3549a863752c87f881d065f0926f8ae4a..4a10761423d2d109287c022d6b54e57637501acb 100644 --- a/src/ParsingDriver.cc +++ b/src/ParsingDriver.cc @@ -2498,10 +2498,12 @@ ParsingDriver::conditional_forecast() } void -ParsingDriver::plot_conditional_forecast(const string &periods, vector<string> symbol_list) +ParsingDriver::plot_conditional_forecast(const optional<string> &periods, vector<string> symbol_list) { - int nperiods = periods.empty() ? -1 : stoi(periods); - mod_file->addStatement(make_unique<PlotConditionalForecastStatement>(nperiods, move(symbol_list), + optional<int> iperiods; + if (periods) + iperiods = stoi(*periods); + mod_file->addStatement(make_unique<PlotConditionalForecastStatement>(move(iperiods), move(symbol_list), mod_file->symbol_table)); } diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh index 8292313680d43e1b68a41bd1af358f42f60b6053..b9a2949eb6d7564d1dd62973877ffdbf9fdb9493 100644 --- a/src/ParsingDriver.hh +++ b/src/ParsingDriver.hh @@ -726,7 +726,7 @@ public: //! Conditional forecast paths block void conditional_forecast_paths(); //! Plot conditional forecast statement - void plot_conditional_forecast(const string &periods, vector<string> symbol_list); + void plot_conditional_forecast(const optional<string> &periods, vector<string> symbol_list); //! Smoother on calibrated models void calib_smoother(vector<string> symbol_list); //! Extended path