From e1cebde83ae7c4168506ff3587b6660bad707195 Mon Sep 17 00:00:00 2001
From: Houtan Bastani <houtan.bastani@ens.fr>
Date: Sun, 25 Dec 2011 19:03:26 +0100
Subject: [PATCH] ms-dsge: add param initialization to C output

---
 ModFile.cc                 |  9 +++++++++
 NumericalInitialization.cc | 10 ++++++++++
 NumericalInitialization.hh |  1 +
 Statement.cc               |  5 +++++
 Statement.hh               |  1 +
 5 files changed, 26 insertions(+)

diff --git a/ModFile.cc b/ModFile.cc
index 7571da2d..a5ab0a42 100644
--- a/ModFile.cc
+++ b/ModFile.cc
@@ -852,6 +852,15 @@ ModFile::writeCOutputFiles(const string &basename) const
 
   dynamic_model.writeCOutput(mDriverCFile, basename, false, false, true, mod_file_struct.order_option, mod_file_struct.estimation_present);
 
+  mDriverCFile << "/*" << endl
+               << " * Writing statements" << endl
+               << " */" << endl;
+
+  // Print statements
+  for (vector<Statement *>::const_iterator it = statements.begin();
+       it != statements.end(); it++)
+      (*it)->writeCOutput(mDriverCFile, basename);
+
   mDriverCFile << "}" << endl;
   mDriverCFile.close();
 
diff --git a/NumericalInitialization.cc b/NumericalInitialization.cc
index 4e2fc618..0d6bcecc 100644
--- a/NumericalInitialization.cc
+++ b/NumericalInitialization.cc
@@ -50,6 +50,16 @@ InitParamStatement::writeOutput(ostream &output, const string &basename) const
   output << symbol_table.getName(symb_id) << " = M_.params( " << id << " );\n";
 }
 
+void
+InitParamStatement::writeCOutput(ostream &output, const string &basename)
+{
+  int id = symbol_table.getTypeSpecificID(symb_id);
+  output << "params[ " << id << " ] = ";
+  param_value->writeOutput(output);
+  output << ";" << endl;
+  output << "double " << symbol_table.getName(symb_id) << " = params[ " << id << " ];" << endl;
+}
+
 void
 InitParamStatement::fillEvalContext(eval_context_t &eval_context) const
 {
diff --git a/NumericalInitialization.hh b/NumericalInitialization.hh
index f9214410..b03ab0d2 100644
--- a/NumericalInitialization.hh
+++ b/NumericalInitialization.hh
@@ -41,6 +41,7 @@ public:
                      const SymbolTable &symbol_table_arg);
   virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
   virtual void writeOutput(ostream &output, const string &basename) const;
+  virtual void writeCOutput(ostream &output, const string &basename);
   //! Fill eval context with parameter value
   void fillEvalContext(eval_context_t &eval_context) const;
 };
diff --git a/Statement.cc b/Statement.cc
index f990f611..3ce955d6 100644
--- a/Statement.cc
+++ b/Statement.cc
@@ -63,6 +63,11 @@ Statement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &wa
 {
 }
 
+void
+Statement::writeCOutput(ostream &output, const string &basename)
+{
+}
+
 void
 Statement::computingPass()
 {
diff --git a/Statement.hh b/Statement.hh
index 40e37818..6abda8fc 100644
--- a/Statement.hh
+++ b/Statement.hh
@@ -138,6 +138,7 @@ public:
     \param basename is the name of the modfile (without extension) which can be used to build auxiliary files
   */
   virtual void writeOutput(ostream &output, const string &basename) const = 0;
+  virtual void writeCOutput(ostream &output, const string &basename);
 };
 
 class NativeStatement : public Statement
-- 
GitLab