From c12088f3146a5abf9476887a5cd368b6565f036f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Tue, 17 Jul 2018 17:38:26 +0200
Subject: [PATCH] C++11: convert AuxVarType to class enum

---
 src/DynamicModel.cc |  64 +++++++++++------------
 src/DynamicModel.hh |   2 +-
 src/SymbolTable.cc  | 122 ++++++++++++++++++++++----------------------
 src/SymbolTable.hh  |  35 +++++++------
 4 files changed, 114 insertions(+), 109 deletions(-)

diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index cf12f329..e30df047 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -5141,29 +5141,29 @@ DynamicModel::writeLatexOriginalFile(const string &basename, const bool write_eq
 void
 DynamicModel::substituteEndoLeadGreaterThanTwo(bool deterministic_model)
 {
-  substituteLeadLagInternal(avEndoLead, deterministic_model, vector<string>());
+  substituteLeadLagInternal(AuxVarType::endoLead, deterministic_model, vector<string>());
 }
 
 void
 DynamicModel::substituteEndoLagGreaterThanTwo(bool deterministic_model)
 {
-  substituteLeadLagInternal(avEndoLag, deterministic_model, vector<string>());
+  substituteLeadLagInternal(AuxVarType::endoLag, deterministic_model, vector<string>());
 }
 
 void
 DynamicModel::substituteExoLead(bool deterministic_model)
 {
-  substituteLeadLagInternal(avExoLead, deterministic_model, vector<string>());
+  substituteLeadLagInternal(AuxVarType::exoLead, deterministic_model, vector<string>());
 }
 
 void
 DynamicModel::substituteExoLag(bool deterministic_model)
 {
-  substituteLeadLagInternal(avExoLag, deterministic_model, vector<string>());
+  substituteLeadLagInternal(AuxVarType::exoLag, deterministic_model, vector<string>());
 }
 
 void
-DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model, const vector<string> &subset)
+DynamicModel::substituteLeadLagInternal(AuxVarType type, bool deterministic_model, const vector<string> &subset)
 {
   ExprNode::subst_table_t subst_table;
   vector<BinaryOpNode *> neweqs;
@@ -5179,19 +5179,19 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
       expr_t subst;
       switch (type)
         {
-        case avEndoLead:
+        case AuxVarType::endoLead:
           subst = value->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model);
           break;
-        case avEndoLag:
+        case AuxVarType::endoLag:
           subst = value->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
           break;
-        case avExoLead:
+        case AuxVarType::exoLead:
           subst = value->substituteExoLead(subst_table, neweqs, deterministic_model);
           break;
-        case avExoLag:
+        case AuxVarType::exoLag:
           subst = value->substituteExoLag(subst_table, neweqs);
           break;
-        case avDiffForward:
+        case AuxVarType::diffForward:
           subst = value->differentiateForwardVars(subset, subst_table, neweqs);
           break;
         default:
@@ -5207,19 +5207,19 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
       expr_t subst;
       switch (type)
         {
-        case avEndoLead:
+        case AuxVarType::endoLead:
           subst = equation->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model);
           break;
-        case avEndoLag:
+        case AuxVarType::endoLag:
           subst = equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
           break;
-        case avExoLead:
+        case AuxVarType::exoLead:
           subst = equation->substituteExoLead(subst_table, neweqs, deterministic_model);
           break;
-        case avExoLag:
+        case AuxVarType::exoLag:
           subst = equation->substituteExoLag(subst_table, neweqs);
           break;
-        case avDiffForward:
+        case AuxVarType::diffForward:
           subst = equation->differentiateForwardVars(subset, subst_table, neweqs);
           break;
         default:
@@ -5239,20 +5239,20 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
       expr_t subst;
       switch (type)
         {
-        case avEndoLead:
+        case AuxVarType::endoLead:
           subst = aux_equation->substituteEndoLeadGreaterThanTwo(subst_table,
                                                                      neweqs, deterministic_model);
           break;
-        case avEndoLag:
+        case AuxVarType::endoLag:
           subst = aux_equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
           break;
-        case avExoLead:
+        case AuxVarType::exoLead:
           subst = aux_equation->substituteExoLead(subst_table, neweqs, deterministic_model);
           break;
-        case avExoLag:
+        case AuxVarType::exoLag:
           subst = aux_equation->substituteExoLag(subst_table, neweqs);
           break;
-        case avDiffForward:
+        case AuxVarType::diffForward:
           subst = aux_equation->differentiateForwardVars(subset, subst_table, neweqs);
           break;
         default:
@@ -5272,20 +5272,20 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
       expr_t subst;
       switch (type)
         {
-        case avEndoLead:
+        case AuxVarType::endoLead:
           subst = diff_aux_equation->substituteEndoLeadGreaterThanTwo(subst_table,
                                                                      neweqs, deterministic_model);
           break;
-        case avEndoLag:
+        case AuxVarType::endoLag:
           subst = diff_aux_equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
           break;
-        case avExoLead:
+        case AuxVarType::exoLead:
           subst = diff_aux_equation->substituteExoLead(subst_table, neweqs, deterministic_model);
           break;
-        case avExoLag:
+        case AuxVarType::exoLag:
           subst = diff_aux_equation->substituteExoLag(subst_table, neweqs);
           break;
-        case avDiffForward:
+        case AuxVarType::diffForward:
           subst = diff_aux_equation->differentiateForwardVars(subset, subst_table, neweqs);
           break;
         default:
@@ -5312,22 +5312,22 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
       cout << "Substitution of ";
       switch (type)
         {
-        case avEndoLead:
+        case AuxVarType::endoLead:
           cout << "endo leads >= 2";
           break;
-        case avEndoLag:
+        case AuxVarType::endoLag:
           cout << "endo lags >= 2";
           break;
-        case avExoLead:
+        case AuxVarType::exoLead:
           cout << "exo leads";
           break;
-        case avExoLag:
+        case AuxVarType::exoLag:
           cout << "exo lags";
           break;
-        case avExpectation:
+        case AuxVarType::expectation:
           cout << "expectation";
           break;
-        case avDiffForward:
+        case AuxVarType::diffForward:
           cout << "forward vars";
           break;
         default:
@@ -5560,7 +5560,7 @@ DynamicModel::removeTrendVariableFromEquations()
 void
 DynamicModel::differentiateForwardVars(const vector<string> &subset)
 {
-  substituteLeadLagInternal(avDiffForward, true, subset);
+  substituteLeadLagInternal(AuxVarType::diffForward, true, subset);
 }
 
 void
diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh
index 80a93d2d..19207d2e 100644
--- a/src/DynamicModel.hh
+++ b/src/DynamicModel.hh
@@ -175,7 +175,7 @@ private:
     \param[in] deterministic_model whether we are in a deterministic model (only for exogenous leads/lags)
     \param[in] subset variables to which to apply the transformation (only for diff of forward vars)
   */
-  void substituteLeadLagInternal(aux_var_t type, bool deterministic_model, const vector<string> &subset);
+  void substituteLeadLagInternal(AuxVarType type, bool deterministic_model, const vector<string> &subset);
 
 private:
   //! Indicate if the temporary terms are computed for the overall model (true) or not (false). Default value true
diff --git a/src/SymbolTable.cc b/src/SymbolTable.cc
index 3d56c1c2..cb6ff2d9 100644
--- a/src/SymbolTable.cc
+++ b/src/SymbolTable.cc
@@ -25,7 +25,7 @@
 
 #include "SymbolTable.hh"
 
-AuxVarInfo::AuxVarInfo(int symb_id_arg, aux_var_t type_arg, int orig_symb_id_arg, int orig_lead_lag_arg,
+AuxVarInfo::AuxVarInfo(int symb_id_arg, AuxVarType type_arg, int orig_symb_id_arg, int orig_lead_lag_arg,
                        int equation_number_for_multiplier_arg, int information_set_arg,
                        expr_t expr_node_arg) :
   symb_id(symb_id_arg),
@@ -345,38 +345,38 @@ SymbolTable::writeOutput(ostream &output) const noexcept(false)
     for (int i = 0; i < (int) aux_vars.size(); i++)
       {
         output << "M_.aux_vars(" << i+1 << ").endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id())+1 << ";" << endl
-               << "M_.aux_vars(" << i+1 << ").type = " << aux_vars[i].get_type() << ";" << endl;
+               << "M_.aux_vars(" << i+1 << ").type = " << aux_vars[i].get_type_id() << ";" << endl;
         switch (aux_vars[i].get_type())
           {
-          case avEndoLead:
-          case avExoLead:
+          case AuxVarType::endoLead:
+          case AuxVarType::exoLead:
             break;
-          case avEndoLag:
-          case avExoLag:
-          case avVarModel:
+          case AuxVarType::endoLag:
+          case AuxVarType::exoLag:
+          case AuxVarType::varModel:
             output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl
                    << "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
             break;
-          case avUnaryOp:
+          case AuxVarType::unaryOp:
             if (aux_vars[i].get_orig_symb_id() >= 0)
               output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl
                      << "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
             break;
-          case avMultiplier:
+          case AuxVarType::multiplier:
             output << "M_.aux_vars(" << i+1 << ").eq_nbr = " << aux_vars[i].get_equation_number_for_multiplier() + 1 << ";" << endl;
             break;
-          case avDiffForward:
+          case AuxVarType::diffForward:
             output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl;
             break;
-          case avExpectation:
+          case AuxVarType::expectation:
             output << "M_.aux_vars(" << i+1 << ").orig_expr = '\\mathbb{E}_{t"
                    << (aux_vars[i].get_information_set() < 0 ? "" : "+")
                    << aux_vars[i].get_information_set() << "}(";
             aux_vars[i].get_expr_node()->writeOutput(output, oLatexDynamicModel);
             output << ")';" << endl;
             break;
-          case avDiff:
-          case avDiffLag:
+          case AuxVarType::diff:
+          case AuxVarType::diffLag:
             if (aux_vars[i].get_orig_symb_id() >= 0)
               output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl
                      << "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
@@ -471,28 +471,28 @@ SymbolTable::writeCOutput(ostream &output) const noexcept(false)
       for (int i = 0; i < (int) aux_vars.size(); i++)
         {
           output << "av[" << i << "].endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id()) << ";" << endl
-                 << "av[" << i << "].type = " << aux_vars[i].get_type() << ";" << endl;
+                 << "av[" << i << "].type = " << aux_vars[i].get_type_id() << ";" << endl;
           switch (aux_vars[i].get_type())
             {
-            case avEndoLead:
-            case avExoLead:
-            case avExpectation:
-            case avMultiplier:
-            case avDiffForward:
+            case AuxVarType::endoLead:
+            case AuxVarType::exoLead:
+            case AuxVarType::expectation:
+            case AuxVarType::multiplier:
+            case AuxVarType::diffForward:
               break;
-            case avEndoLag:
-            case avExoLag:
-            case avVarModel:
+            case AuxVarType::endoLag:
+            case AuxVarType::exoLag:
+            case AuxVarType::varModel:
               output << "av[" << i << "].orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
                      << "av[" << i << "].orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
               break;
-            case avUnaryOp:
+            case AuxVarType::unaryOp:
               if (aux_vars[i].get_orig_symb_id() >= 0)
                 output << "av[" << i << "].orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
                        << "av[" << i << "].orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
               break;
-            case avDiff:
-            case avDiffLag:
+            case AuxVarType::diff:
+            case AuxVarType::diffLag:
               if (aux_vars[i].get_orig_symb_id() >= 0)
                 output << "av[" << i << "].orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
                        << "av[" << i << "].orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
@@ -575,28 +575,28 @@ SymbolTable::writeCCOutput(ostream &output) const noexcept(false)
     {
       output << "aux_vars_t av" << i << ";" << endl;
       output << "av" << i << ".endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id()) << ";" << endl
-             << "av" << i << ".type = " << aux_vars[i].get_type() << ";" << endl;
+             << "av" << i << ".type = " << aux_vars[i].get_type_id() << ";" << endl;
       switch (aux_vars[i].get_type())
         {
-        case avEndoLead:
-        case avExoLead:
-        case avExpectation:
-        case avMultiplier:
-        case avDiffForward:
+        case AuxVarType::endoLead:
+        case AuxVarType::exoLead:
+        case AuxVarType::expectation:
+        case AuxVarType::multiplier:
+        case AuxVarType::diffForward:
           break;
-        case avEndoLag:
-        case avExoLag:
-        case avVarModel:
+        case AuxVarType::endoLag:
+        case AuxVarType::exoLag:
+        case AuxVarType::varModel:
           output << "av" << i << ".orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
                  << "av" << i << ".orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
           break;
-        case avUnaryOp:
+        case AuxVarType::unaryOp:
           if (aux_vars[i].get_orig_symb_id() >= 0)
             output << "av" << i << ".orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
                    << "av" << i << ".orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
           break;
-        case avDiff:
-        case avDiffLag:
+        case AuxVarType::diff:
+        case AuxVarType::diffLag:
           if (aux_vars[i].get_orig_symb_id() >= 0)
             output << "av" << i << ".orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
                    << "av" << i << ".orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
@@ -635,7 +635,7 @@ SymbolTable::addLeadAuxiliaryVarInternal(bool endo, int index, expr_t expr_arg)
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, (endo ? avEndoLead : avExoLead), 0, 0, 0, 0, expr_arg);
+  aux_vars.emplace_back(symb_id, (endo ? AuxVarType::endoLead : AuxVarType::exoLead), 0, 0, 0, 0, expr_arg);
 
   return symb_id;
 }
@@ -661,7 +661,7 @@ SymbolTable::addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_le
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, (endo ? avEndoLag : avExoLag), orig_symb_id, orig_lead_lag, 0, 0, expr_arg);
+  aux_vars.emplace_back(symb_id, (endo ? AuxVarType::endoLag : AuxVarType::exoLag), orig_symb_id, orig_lead_lag, 0, 0, expr_arg);
 
   return symb_id;
 }
@@ -709,7 +709,7 @@ SymbolTable::addExpectationAuxiliaryVar(int information_set, int index, expr_t e
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, avExpectation, 0, 0, 0, information_set, expr_arg);
+  aux_vars.emplace_back(symb_id, AuxVarType::expectation, 0, 0, 0, information_set, expr_arg);
 
   return symb_id;
 }
@@ -732,7 +732,7 @@ SymbolTable::addDiffLagAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, avDiffLag, orig_symb_id, orig_lag, 0, 0, expr_arg);
+  aux_vars.emplace_back(symb_id, AuxVarType::diffLag, orig_symb_id, orig_lag, 0, 0, expr_arg);
 
   return symb_id;
 }
@@ -755,7 +755,7 @@ SymbolTable::addDiffAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id, i
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, avDiff, orig_symb_id, orig_lag, 0, 0, expr_arg);
+  aux_vars.emplace_back(symb_id, AuxVarType::diff, orig_symb_id, orig_lag, 0, 0, expr_arg);
 
   return symb_id;
 }
@@ -783,7 +783,7 @@ SymbolTable::addUnaryOpAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, avUnaryOp, orig_symb_id, orig_lag, 0, 0, expr_arg);
+  aux_vars.emplace_back(symb_id, AuxVarType::unaryOp, orig_symb_id, orig_lag, 0, 0, expr_arg);
 
   return symb_id;
 }
@@ -805,7 +805,7 @@ SymbolTable::addVarModelEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag,
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, avVarModel, orig_symb_id, orig_lead_lag, 0, 0, expr_arg);
+  aux_vars.emplace_back(symb_id, AuxVarType::varModel, orig_symb_id, orig_lead_lag, 0, 0, expr_arg);
 
   return symb_id;
 }
@@ -827,7 +827,7 @@ SymbolTable::addMultiplierAuxiliaryVar(int index) noexcept(false)
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, avMultiplier, 0, 0, index, 0, nullptr);
+  aux_vars.emplace_back(symb_id, AuxVarType::multiplier, 0, 0, index, 0, nullptr);
   return symb_id;
 }
 
@@ -848,7 +848,7 @@ SymbolTable::addDiffForwardAuxiliaryVar(int orig_symb_id, expr_t expr_arg) noexc
       exit(EXIT_FAILURE);
     }
 
-  aux_vars.emplace_back(symb_id, avDiffForward, orig_symb_id, 0, 0, 0, expr_arg);
+  aux_vars.emplace_back(symb_id, AuxVarType::diffForward, orig_symb_id, 0, 0, 0, expr_arg);
   return symb_id;
 }
 
@@ -856,7 +856,7 @@ int
 SymbolTable::searchAuxiliaryVars(int orig_symb_id, int orig_lead_lag) const noexcept(false)
 {
   for (const auto & aux_var : aux_vars)
-    if ((aux_var.get_type() == avEndoLag || aux_var.get_type() == avExoLag)
+    if ((aux_var.get_type() == AuxVarType::endoLag || aux_var.get_type() == AuxVarType::exoLag)
         && aux_var.get_orig_symb_id() == orig_symb_id && aux_var.get_orig_lead_lag() == orig_lead_lag)
       return aux_var.get_symb_id();
   throw SearchFailedException(orig_symb_id, orig_lead_lag);
@@ -866,7 +866,7 @@ int
 SymbolTable::getOrigSymbIdForAuxVar(int aux_var_symb_id) const noexcept(false)
 {
   for (const auto & aux_var : aux_vars)
-    if ((aux_var.get_type() == avEndoLag || aux_var.get_type() == avExoLag || aux_var.get_type() == avDiff)
+    if ((aux_var.get_type() == AuxVarType::endoLag || aux_var.get_type() == AuxVarType::exoLag || aux_var.get_type() == AuxVarType::diff)
         && aux_var.get_symb_id() == aux_var_symb_id)
       return aux_var.get_orig_symb_id();
   throw UnknownSymbolIDException(aux_var_symb_id);
@@ -1024,7 +1024,7 @@ bool
 SymbolTable::isAuxiliaryVariableButNotMultiplier(int symb_id) const
 {
   for (const auto & aux_var : aux_vars)
-    if (aux_var.get_symb_id() == symb_id && aux_var.get_type() != avMultiplier)
+    if (aux_var.get_symb_id() == symb_id && aux_var.get_type() != AuxVarType::multiplier)
       return true;
   return false;
 }
@@ -1102,38 +1102,38 @@ SymbolTable::writeJuliaOutput(ostream &output) const noexcept(false)
         {
           output << "                   DynareModel.AuxVars("
                  << getTypeSpecificID(aux_var.get_symb_id()) + 1 << ", "
-                 << aux_var.get_type() << ", ";
+                 << aux_var.get_type_id() << ", ";
           switch (aux_var.get_type())
             {
-            case avEndoLead:
-            case avExoLead:
-            case avEndoLag:
-            case avExoLag:
-            case avVarModel:
+            case AuxVarType::endoLead:
+            case AuxVarType::exoLead:
+            case AuxVarType::endoLag:
+            case AuxVarType::exoLag:
+            case AuxVarType::varModel:
               output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", "
                      << aux_var.get_orig_lead_lag() << ", typemin(Int), string()";
               break;
-            case avUnaryOp:
+            case AuxVarType::unaryOp:
               if (aux_var.get_orig_symb_id() >= 0)
                 output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", " << aux_var.get_orig_lead_lag();
               else
                 output << "typemin(Int), typemin(Int)";
               output << ", typemin(Int), string()";
               break;
-            case avDiff:
-            case avDiffLag:
+            case AuxVarType::diff:
+            case AuxVarType::diffLag:
               if (aux_var.get_orig_symb_id() >= 0)
                 output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", "
                        << aux_var.get_orig_lead_lag() << ", typemin(Int), string()";
               break;
-            case avMultiplier:
+            case AuxVarType::multiplier:
               output << "typemin(Int), typemin(Int), " << aux_var.get_equation_number_for_multiplier() + 1
                      << ", string()";
               break;
-            case avDiffForward:
+            case AuxVarType::diffForward:
               output << getTypeSpecificID(aux_var.get_orig_symb_id())+1 << ", typemin(Int), typemin(Int), string()";
               break;
-            case avExpectation:
+            case AuxVarType::expectation:
               output << "typemin(Int), typemin(Int), typemin(Int), \"\\mathbb{E}_{t"
                      << (aux_var.get_information_set() < 0 ? "" : "+")
                      << aux_var.get_information_set() << "}(";
diff --git a/src/SymbolTable.hh b/src/SymbolTable.hh
index 0ccdc1c1..5a72fae7 100644
--- a/src/SymbolTable.hh
+++ b/src/SymbolTable.hh
@@ -35,19 +35,19 @@ using namespace std;
 using expr_t = class ExprNode *;
 
 //! Types of auxiliary variables
-enum aux_var_t
+enum class AuxVarType
   {
-    avEndoLead = 0,    //!< Substitute for endo leads >= 2
-    avEndoLag = 1,     //!< Substitute for endo lags >= 2
-    avExoLead = 2,     //!< Substitute for exo leads >= 1
-    avExoLag = 3,      //!< Substitute for exo lags >= 1
-    avExpectation = 4, //!< Substitute for Expectation Operator
-    avDiffForward = 5, //!< Substitute for the differentiate of a forward variable
-    avMultiplier = 6,  //!< Multipliers for FOC of Ramsey Problem
-    avVarModel = 7,    //!< Variable for var_model with order > abs(min_lag()) present in model
-    avDiff = 8,        //!< Variable for Diff operator
-    avDiffLag = 9,     //!< Variable for timing between Diff operators
-    avUnaryOp = 10     //!< Variable for allowing the undiff operator to work when diff was taken of unary op, eg diff(log(x))
+    endoLead = 0,    //!< Substitute for endo leads >= 2
+    endoLag = 1,     //!< Substitute for endo lags >= 2
+    exoLead = 2,     //!< Substitute for exo leads >= 1
+    exoLag = 3,      //!< Substitute for exo lags >= 1
+    expectation = 4, //!< Substitute for Expectation Operator
+    diffForward = 5, //!< Substitute for the differentiate of a forward variable
+    multiplier = 6,  //!< Multipliers for FOC of Ramsey Problem
+    varModel = 7,    //!< Variable for var_model with order > abs(min_lag()) present in model
+    diff = 8,        //!< Variable for Diff operator
+    diffLag = 9,     //!< Variable for timing between Diff operators
+    unaryOp = 10     //!< Variable for allowing the undiff operator to work when diff was taken of unary op, eg diff(log(x))
   };
 
 //! Information on some auxiliary variables
@@ -55,25 +55,30 @@ class AuxVarInfo
 {
 private:
   int symb_id; //!< Symbol ID of the auxiliary variable
-  aux_var_t type; //!< Its type
+  AuxVarType type; //!< Its type
   int orig_symb_id; //!< Symbol ID of the endo of the original model represented by this aux var. Only used for avEndoLag and avExoLag.
   int orig_lead_lag; //!< Lead/lag of the endo of the original model represented by this aux var. Only used for avEndoLag and avExoLag.
   int equation_number_for_multiplier; //!< Stores the original constraint equation number associated with this aux var. Only used for avMultiplier.
   int information_set; //! Argument of expectation operator. Only used for avExpectation.
   expr_t expr_node; //! Auxiliary variable definition
 public:
-  AuxVarInfo(int symb_id_arg, aux_var_t type_arg, int orig_symb_id, int orig_lead_lag, int equation_number_for_multiplier_arg, int information_set_arg, expr_t expr_node_arg);
+  AuxVarInfo(int symb_id_arg, AuxVarType type_arg, int orig_symb_id, int orig_lead_lag, int equation_number_for_multiplier_arg, int information_set_arg, expr_t expr_node_arg);
   int
   get_symb_id() const
   {
     return symb_id;
   };
-  aux_var_t
+  AuxVarType
   get_type() const
   {
     return type;
   };
   int
+  get_type_id() const
+  {
+    return static_cast<int>(type);
+  }
+  int
   get_orig_symb_id() const
   {
     return orig_symb_id;
-- 
GitLab