From 4eb178beada12e3c224bddcc73ae45469c52d604 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Mon, 17 Jul 2017 11:57:53 +0200
Subject: [PATCH] STYLE: use Enum for #inputMode selection

---
 .../inputModeEntry/inputModeEntry.C           | 69 ++++++++++---------
 .../inputModeEntry/inputModeEntry.H           | 10 ++-
 2 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.C
index fbb6787ca1..46af126e45 100644
--- a/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.C
+++ b/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.C
@@ -55,60 +55,61 @@ namespace functionEntries
 }
 }
 
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-// we could combine this into execute() directly, but leave it here for now
-void Foam::functionEntries::inputModeEntry::setMode(Istream& is)
+const Foam::Enum
+<
+    Foam::functionEntries::inputModeEntry::inputMode
+>
+Foam::functionEntries::inputModeEntry::inputModeNames
 {
-    clear();
+    { inputMode::MERGE,  "merge" },
+    { inputMode::OVERWRITE, "overwrite" },
+    { inputMode::PROTECT, "protect" },
+    { inputMode::WARN, "warn" },
+    { inputMode::ERROR, "error" },
+    // Aliases
+    { inputMode::MERGE, "default" },
+};
 
-    const word mode(is);
-    if (mode == "merge" || mode == "default")
-    {
-        mode_ = MERGE;
-    }
-    else if (mode == "overwrite")
-    {
-        mode_ = OVERWRITE;
-    }
-    else if (mode == "protect")
-    {
-        mode_ = PROTECT;
-    }
-    else if (mode == "warn")
-    {
-        mode_ = WARN;
-    }
-    else if (mode == "error")
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool Foam::functionEntries::inputModeEntry::execute
+(
+    dictionary& unused,
+    Istream& is
+)
+{
+    const word modeName(is);
+
+    // Bheaviour like Enum lookupOrFailsafe()
+    if (inputModeNames.hasEnum(modeName))
     {
-        mode_ = ERROR;
+        mode_ = inputModeNames[modeName];
     }
     else
     {
         WarningInFunction
-            << "unsupported input mode '" << mode
+            << "Unsupported inputMode '" << modeName
             << "' ... defaulting to 'merge'"
             << endl;
+
+        reset();
     }
-}
 
+    return true;
+}
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-bool Foam::functionEntries::inputModeEntry::execute
-(
-    dictionary& unused,
-    Istream& is
-)
+void Foam::functionEntries::inputModeEntry::reset()
 {
-    setMode(is);
-    return true;
+    mode_ = MERGE;
 }
 
 
 void Foam::functionEntries::inputModeEntry::clear()
 {
-    mode_ = MERGE;
+    reset();
 }
 
 
diff --git a/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.H b/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.H
index 66c98243ad..9a9864385a 100644
--- a/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.H
+++ b/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.H
@@ -58,6 +58,7 @@ SourceFiles
 #define inputModeEntry_H
 
 #include "functionEntry.H"
+#include "Enum.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -84,15 +85,15 @@ class inputModeEntry
             ERROR
         };
 
+        //- Text representations of the input modes
+        const static Enum<inputMode> inputModeNames;
+
         //- The current input mode
         static inputMode mode_;
 
 
     // Private Member Functions
 
-        //- Read the mode as a word and set enum appropriately
-        static void setMode(Istream& is);
-
         //- Disallow default bitwise copy construct
         inputModeEntry(const inputModeEntry&) = delete;
 
@@ -112,6 +113,9 @@ public:
         static bool execute(dictionary& parentDict, Istream& is);
 
         //- Reset the inputMode to %default (ie, %merge)
+        static void reset();
+
+        //- Identical to reset.
         static void clear();
 
         //- Return true if the inputMode is %merge
-- 
GitLab