From dad94a7d58b87a05428b7bedee5392f408a95d3a Mon Sep 17 00:00:00 2001 From: Houtan Bastani <houtan@dynare.org> Date: Fri, 13 Oct 2017 16:21:13 +0200 Subject: [PATCH] preprocessor: clean up xref JSON printing --- DynamicModel.cc | 75 +++++++++++-------------------------------------- DynamicModel.hh | 1 + 2 files changed, 18 insertions(+), 58 deletions(-) diff --git a/DynamicModel.cc b/DynamicModel.cc index 8d92a564..be0dd601 100644 --- a/DynamicModel.cc +++ b/DynamicModel.cc @@ -5537,16 +5537,15 @@ DynamicModel::writeJsonOutput(ostream &output) const } void -DynamicModel::writeJsonXrefs(ostream &output) const +DynamicModel::writeJsonXrefsHelper(ostream &output, const map<pair<int, int>, set<int> > &xrefs) const { - output << "\"xrefs\": {" - << "\"parameters\": ["; - for (map<pair<int, int>, set<int> >::const_iterator it = xref_param.begin(); - it != xref_param.end(); it++) + for (map<pair<int, int>, set<int> >::const_iterator it = xrefs.begin(); + it != xrefs.end(); it++) { - if (it != xref_param.begin()) + if (it != xrefs.begin()) output << ", "; - output << "{\"parameter\": \"" << symbol_table.getName(it->first.first) << "\"" + output << "{\"name\": \"" << symbol_table.getName(it->first.first) << "\"" + << ", \"shift\": " << it->first.second << ", \"equations\": ["; for (set<int>::const_iterator it1 = it->second.begin(); it1 != it->second.end(); it1++) @@ -5557,63 +5556,23 @@ DynamicModel::writeJsonXrefs(ostream &output) const } output << "]}"; } +} + +void +DynamicModel::writeJsonXrefs(ostream &output) const +{ + output << "\"xrefs\": {" + << "\"parameters\": ["; + writeJsonXrefsHelper(output, xref_param); output << "]" << ", \"endogenous\": ["; - for (map<pair<int, int>, set<int> >::const_iterator it = xref_endo.begin(); - it != xref_endo.end(); it++) - { - if (it != xref_endo.begin()) - output << ", "; - output << "{\"endogenous\": \"" << symbol_table.getName(it->first.first) << "\"" - << ", \"shift\": " << it->first.second - << ", \"equations\": ["; - for (set<int>::const_iterator it1 = it->second.begin(); - it1 != it->second.end(); it1++) - { - if (it1 != it->second.begin()) - output << ", "; - output << *it1 + 1; - } - output << "]}"; - } + writeJsonXrefsHelper(output, xref_endo); output << "]" << ", \"exogenous\": ["; - for (map<pair<int, int>, set<int> >::const_iterator it = xref_exo.begin(); - it != xref_exo.end(); it++) - { - if (it != xref_exo.begin()) - output << ", "; - output << "{\"exogenous\": \"" << symbol_table.getName(it->first.first) << "\"" - << ", \"shift\": " << it->first.second - << ", \"equations\": ["; - for (set<int>::const_iterator it1 = it->second.begin(); - it1 != it->second.end(); it1++) - { - if (it1 != it->second.begin()) - output << ", "; - output << *it1 + 1; - } - output << "]}"; - } + writeJsonXrefsHelper(output, xref_exo); output << "]" << ", \"exogenous_deterministic\": ["; - for (map<pair<int, int>, set<int> >::const_iterator it = xref_exo_det.begin(); - it != xref_exo_det.end(); it++) - { - if (it != xref_exo_det.begin()) - output << ", "; - output << "{\"exogenous_det\": \"" << symbol_table.getName(it->first.first) << "\"" - << ", \"shift\": " << it->first.second - << ", \"equations\": ["; - for (set<int>::const_iterator it1 = it->second.begin(); - it1 != it->second.end(); it1++) - { - if (it1 != it->second.begin()) - output << ", "; - output << *it1 + 1; - } - output << "]}"; - } + writeJsonXrefsHelper(output, xref_exo_det); output << "]}" << endl; } diff --git a/DynamicModel.hh b/DynamicModel.hh index 36926611..e5b9be49 100644 --- a/DynamicModel.hh +++ b/DynamicModel.hh @@ -264,6 +264,7 @@ public: //! Write cross reference output if the xref maps have been filed void writeJsonXrefs(ostream &output) const; + void writeJsonXrefsHelper(ostream &output, const map<pair<int, int>, set<int> > &xrefs) const; //! Return true if the hessian is equal to zero inline bool checkHessianZero() const; -- GitLab