From 98210a2092d54b32f9fee8a485e49bc55530139b Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@lis-lab.fr>
Date: Tue, 9 Feb 2021 13:12:12 +0100
Subject: [PATCH] strongly typed enums

---
 common/include/Dict.hpp              | 5 +++--
 common/src/Dict.cpp                  | 2 ++
 reading_machine/include/Action.hpp   | 2 +-
 reading_machine/include/Config.hpp   | 2 +-
 reading_machine/include/Strategy.hpp | 2 +-
 reading_machine/src/Transition.cpp   | 4 ++--
 trainer/include/Trainer.hpp          | 2 +-
 7 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/common/include/Dict.hpp b/common/include/Dict.hpp
index 64a5539..f78f0fd 100644
--- a/common/include/Dict.hpp
+++ b/common/include/Dict.hpp
@@ -10,13 +10,14 @@ class Dict
 {
   public :
 
-  enum State {Open, Closed};
-  enum Encoding {Binary, Ascii};
+  enum class State {Open, Closed};
+  enum class Encoding {Binary, Ascii};
 
   public :
 
   static constexpr char const * unknownValueStr = "__unknownValue__";
   static constexpr char const * nullValueStr = "__nullValue__";
+  static constexpr char const * oobValueStr = "__oobValue__";
   static constexpr char const * noChildValueStr = "__noChildValue__";
   static constexpr char const * emptyValueStr = "__emptyValue__";
   static constexpr char const * separatorValueStr = "__separatorValue__";
diff --git a/common/src/Dict.cpp b/common/src/Dict.cpp
index eab5646..85cdae9 100644
--- a/common/src/Dict.cpp
+++ b/common/src/Dict.cpp
@@ -6,6 +6,7 @@ Dict::Dict(State state)
   setState(state);
   insert(unknownValueStr);
   insert(nullValueStr);
+  insert(oobValueStr);
   insert(noChildValueStr);
   insert(emptyValueStr);
   insert(numberValueStr);
@@ -301,6 +302,7 @@ bool Dict::isSpecialValue(const std::string & value)
 {
   return value == unknownValueStr
   || value == nullValueStr
+  || value == oobValueStr
   || value == noChildValueStr
   || value == emptyValueStr
   || value == separatorValueStr
diff --git a/reading_machine/include/Action.hpp b/reading_machine/include/Action.hpp
index a0b23a3..4afd9e6 100644
--- a/reading_machine/include/Action.hpp
+++ b/reading_machine/include/Action.hpp
@@ -10,7 +10,7 @@ class Action
 {
   public :
 
-  enum Type
+  enum class Type
   {
     Push,
     Pop,
diff --git a/reading_machine/include/Config.hpp b/reading_machine/include/Config.hpp
index 68408c8..801173f 100644
--- a/reading_machine/include/Config.hpp
+++ b/reading_machine/include/Config.hpp
@@ -31,7 +31,7 @@ class Config
   static constexpr int nbHypothesesMax = 1;
   static constexpr int maxNbAppliableSplitTransitions = 8;
 
-  enum Object
+  enum class Object
   {
     Buffer,
     Stack
diff --git a/reading_machine/include/Strategy.hpp b/reading_machine/include/Strategy.hpp
index c907b71..c0b3323 100644
--- a/reading_machine/include/Strategy.hpp
+++ b/reading_machine/include/Strategy.hpp
@@ -19,7 +19,7 @@ class Strategy
   {
     private :
 
-    enum EndCondition
+    enum class EndCondition
     {
       CannotMove
     };
diff --git a/reading_machine/src/Transition.cpp b/reading_machine/src/Transition.cpp
index db34591..e80ae0b 100644
--- a/reading_machine/src/Transition.cpp
+++ b/reading_machine/src/Transition.cpp
@@ -758,7 +758,7 @@ void Transition::initEOS(int bufferIndex)
 
   costDynamic = [bufferIndex](const Config & config)
   {
-    int lineIndex = config.getRelativeWordIndex(Config::Buffer, bufferIndex);
+    int lineIndex = config.getRelativeWordIndex(Config::Object::Buffer, bufferIndex);
     if (config.getConst(Config::EOSColName, lineIndex, 0) != Config::EOSSymbol1)
       return std::numeric_limits<int>::max();
 
@@ -772,7 +772,7 @@ void Transition::initNotEOS(int bufferIndex)
 {
   costDynamic = [bufferIndex](const Config & config)
   {
-    int lineIndex = config.getRelativeWordIndex(Config::Buffer, bufferIndex);
+    int lineIndex = config.getRelativeWordIndex(Config::Object::Buffer, bufferIndex);
     if (config.getConst(Config::EOSColName, lineIndex, 0) == Config::EOSSymbol1)
       return std::numeric_limits<int>::max();
 
diff --git a/trainer/include/Trainer.hpp b/trainer/include/Trainer.hpp
index a936bad..ef0f25e 100644
--- a/trainer/include/Trainer.hpp
+++ b/trainer/include/Trainer.hpp
@@ -9,7 +9,7 @@ class Trainer
 {
   public :
 
-  enum TrainAction
+  enum class TrainAction
   {
     ExtractGold,
     ExtractDynamic,
-- 
GitLab