From 467604d42811958d99bb1c769aad9f9c1f52ef04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Fri, 25 May 2018 12:20:25 +0200 Subject: [PATCH] Simplify ExprNode::writeOutput methods The version with no temporary_terms_idxs argument needs not be virtual, since it is the same implementation in all derived classes. Rather move it at the level of the base ExprNode class. --- src/DynamicModel.cc | 2 +- src/ExprNode.cc | 98 ++++----------------------------------------- src/ExprNode.hh | 13 +----- 3 files changed, 10 insertions(+), 103 deletions(-) diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index f29d4283..e9427419 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -3475,7 +3475,7 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de temporary_terms_t temp_terms_empty; for (set::const_iterator it = pac_expectation_info.begin(); it != pac_expectation_info.end(); it++) - (*it)->writeOutput(output, oMatlabDynamicModel, temp_terms_empty, tef_terms); + (*it)->ExprNode::writeOutput(output, oMatlabDynamicModel, temp_terms_empty, tef_terms); } map >, expr_t> diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 25ca28c7..669a18bf 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -176,6 +176,14 @@ ExprNode::writeOutput(ostream &output, ExprNodeOutputType output_type, const tem writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); } +void +ExprNode::writeOutput(ostream &output, ExprNodeOutputType output_type, + const temporary_terms_t &temporary_terms, + deriv_node_temp_terms_t &tef_terms) const +{ + writeOutput(output, output_type, temporary_terms, {}, tef_terms); +} + void ExprNode::writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs) const { @@ -349,15 +357,6 @@ NumConstNode::collectTemporary_terms(const temporary_terms_t &temporary_terms, t temporary_terms_inuse.insert(idx); } -void -NumConstNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - void NumConstNode::writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, @@ -1046,15 +1045,6 @@ VariableNode::writeOutput(ostream &output, ExprNodeOutputType output_type, } } -void -VariableNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - expr_t VariableNode::substituteStaticAuxiliaryVariable() const { @@ -2567,15 +2557,6 @@ UnaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type, output << RIGHT_PAR(output_type); } -void -UnaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - void UnaryOpNode::writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, @@ -4315,15 +4296,6 @@ BinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type, output << RIGHT_PAR(output_type); } -void -BinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - void BinaryOpNode::writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, @@ -5571,15 +5543,6 @@ TrinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type, } } -void -TrinaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - void TrinaryOpNode::writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, @@ -6717,15 +6680,6 @@ ExternalFunctionNode::writeOutput(ostream &output, ExprNodeOutputType output_typ output << "TEF_" << getIndxInTefTerms(symb_id, tef_terms); } -void -ExternalFunctionNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - void ExternalFunctionNode::writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, @@ -7003,15 +6957,6 @@ FirstDerivExternalFunctionNode::writeOutput(ostream &output, ExprNodeOutputType << LEFT_ARRAY_SUBSCRIPT(output_type) << tmpIndx << RIGHT_ARRAY_SUBSCRIPT(output_type); } -void -FirstDerivExternalFunctionNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - void FirstDerivExternalFunctionNode::compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, @@ -7415,15 +7360,6 @@ SecondDerivExternalFunctionNode::writeOutput(ostream &output, ExprNodeOutputType << LEFT_ARRAY_SUBSCRIPT(output_type) << tmpIndex1 << "," << tmpIndex2 << RIGHT_ARRAY_SUBSCRIPT(output_type); } -void -SecondDerivExternalFunctionNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - void SecondDerivExternalFunctionNode::writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, @@ -7713,15 +7649,6 @@ VarExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type, output << "dynamic_var_forecast_" << model_name << "_" << forecast_horizon << "(" << yidx + 1 << ")"; } -void -VarExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - int VarExpectationNode::maxEndoLead() const { @@ -8158,15 +8085,6 @@ PacExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type, output << "];" << endl; } -void -PacExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type, - const temporary_terms_t &temporary_terms, - deriv_node_temp_terms_t &tef_terms) const -{ - temporary_terms_idxs_t temporary_terms_idxs; - writeOutput(output, output_type, temporary_terms, temporary_terms_idxs, tef_terms); -} - int PacExpectationNode::maxEndoLead() const { diff --git a/src/ExprNode.hh b/src/ExprNode.hh index dbea8e80..a3779cd9 100644 --- a/src/ExprNode.hh +++ b/src/ExprNode.hh @@ -221,7 +221,6 @@ class ExprNode \param[in] temporary_terms the nodes that are marked as temporary terms \param[in,out] tef_terms the set of already written external function nodes */ - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const = 0; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const = 0; //! returns true if the expr node contains an external function @@ -236,6 +235,7 @@ class ExprNode //! Writes output of node, using a Txxx notation for nodes in temporary_terms void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms) const; void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs) const; + void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; //! Writes output of node in JSON syntax virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic = true) const = 0; @@ -559,7 +559,6 @@ public: return id; }; virtual void prepareForDerivation(); - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic) const; virtual bool containsExternalFunction() const; @@ -627,7 +626,6 @@ private: public: VariableNode(DataTree &datatree_arg, int symb_id_arg, int lag_arg); virtual void prepareForDerivation(); - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic) const; virtual bool containsExternalFunction() const; @@ -727,7 +725,6 @@ public: virtual void computeTemporaryTerms(map > &reference_count, map &temp_terms_map, bool is_matlab, NodeTreeReference tr) const; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic) const; virtual bool containsExternalFunction() const; @@ -841,7 +838,6 @@ public: virtual void computeTemporaryTerms(map > &reference_count, map &temp_terms_map, bool is_matlab, NodeTreeReference tr) const; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic) const; virtual bool containsExternalFunction() const; @@ -974,7 +970,6 @@ public: virtual void computeTemporaryTerms(map > &reference_count, map &temp_terms_map, bool is_matlab, NodeTreeReference tr) const; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic) const; virtual bool containsExternalFunction() const; @@ -1077,7 +1072,6 @@ public: virtual void computeTemporaryTerms(map > &reference_count, map &temp_terms_map, bool is_matlab, NodeTreeReference tr) const = 0; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const = 0; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const = 0; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic = true) const = 0; virtual bool containsExternalFunction() const; @@ -1167,7 +1161,6 @@ public: virtual void computeTemporaryTerms(map > &reference_count, map &temp_terms_map, bool is_matlab, NodeTreeReference tr) const; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic) const; virtual void writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output_type, @@ -1214,7 +1207,6 @@ public: int Curr_block, vector< vector > &v_temporary_terms, int equation) const; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic) const; virtual void compile(ostream &CompileCode, unsigned int &instruction_number, @@ -1260,7 +1252,6 @@ public: int Curr_block, vector< vector > &v_temporary_terms, int equation) const; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const bool isdynamic) const; virtual void compile(ostream &CompileCode, unsigned int &instruction_number, @@ -1297,7 +1288,6 @@ public: virtual void computeTemporaryTerms(map > &reference_count, map &temp_terms_map, bool is_matlab, NodeTreeReference tr) const; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void computeTemporaryTerms(map &reference_count, temporary_terms_t &temporary_terms, @@ -1381,7 +1371,6 @@ public: virtual void computeTemporaryTerms(map > &reference_count, map &temp_terms_map, bool is_matlab, NodeTreeReference tr) const; - virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; virtual void writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const; virtual void computeTemporaryTerms(map &reference_count, temporary_terms_t &temporary_terms,