From 77cb50ae97a38b5741e8a330ab9fe57ce9c13dae Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Fri, 18 Aug 2023 11:54:32 +0200
Subject: [PATCH] ENH: relocate functionObjectList errorHandling types to error
 (#2966)

- was previously private within functionObjectList, now exposed from
  error as 'handlerTypes' and 'handlerNames' enumeration.
---
 src/OpenFOAM/db/error/error.C                 | 18 +++++-
 src/OpenFOAM/db/error/error.H                 | 25 +++++++-
 .../functionObjectList/functionObjectList.C   | 63 ++++++++-----------
 .../functionObjectList/functionObjectList.H   | 30 +++------
 4 files changed, 71 insertions(+), 65 deletions(-)

diff --git a/src/OpenFOAM/db/error/error.C b/src/OpenFOAM/db/error/error.C
index def5ac83868..8d687387a72 100644
--- a/src/OpenFOAM/db/error/error.C
+++ b/src/OpenFOAM/db/error/error.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2014 OpenFOAM Foundation
-    Copyright (C) 2015-2020 OpenCFD Ltd.
+    Copyright (C) 2015-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -34,8 +34,24 @@ License
 #include "Pstream.H"
 #include "foamVersion.H"
 #include "OSspecific.H"
+#include "Enum.H"
 #include "Switch.H"
 
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+const Foam::Enum
+<
+    Foam::error::handlerTypes
+>
+Foam::error::handlerNames
+({
+    { handlerTypes::DEFAULT, "default" },
+    { handlerTypes::IGNORE, "ignore" },
+    { handlerTypes::WARN, "warn" },
+    { handlerTypes::STRICT, "strict" },
+});
+
+
 // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
 
 void Foam::error::warnAboutAge(const char* what, const int version)
diff --git a/src/OpenFOAM/db/error/error.H b/src/OpenFOAM/db/error/error.H
index 3ce8c20db2d..8f6754af440 100644
--- a/src/OpenFOAM/db/error/error.H
+++ b/src/OpenFOAM/db/error/error.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2015 OpenFOAM Foundation
-    Copyright (C) 2015-2020 OpenCFD Ltd.
+    Copyright (C) 2015-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -53,8 +53,8 @@ SeeAlso
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef error_H
-#define error_H
+#ifndef Foam_error_H
+#define Foam_error_H
 
 #include "messageStream.H"
 #include <memory>
@@ -64,6 +64,10 @@ SeeAlso
 namespace Foam
 {
 
+// Forward Declarations
+class OStringStream;
+template<class EnumType> class Enum;
+
 /*---------------------------------------------------------------------------*\
                             Class error Declaration
 \*---------------------------------------------------------------------------*/
@@ -92,6 +96,21 @@ protected:
 
 public:
 
+    // Data Types
+
+        //- Handling of errors. The exact handling depends on the local context.
+        enum class handlerTypes : char
+        {
+            DEFAULT = 0,  //!< Default behaviour (local meaning)
+            IGNORE,       //!< Ignore on errors/problems
+            WARN,         //!< Warn on errors/problems
+            STRICT        //!< Fatal on errors/problems
+        };
+
+        //- Names of the error handler types
+        static const Enum<handlerTypes> handlerNames;
+
+
     // Constructors
 
         //- Construct from title string
diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
index 837402f0fa2..b66d3a0ec58 100644
--- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
+++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2015-2020 OpenCFD Ltd.
+    Copyright (C) 2015-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -43,7 +43,7 @@ License
 /* * * * * * * * * * * * * * * Static Member Data  * * * * * * * * * * * * * */
 
 //- Max number of warnings (per functionObject)
-static constexpr const uint32_t maxWarnings = 10u;
+static constexpr const unsigned maxWarnings = 10u;
 
 Foam::fileName Foam::functionObjectList::functionObjectDictPath
 (
@@ -51,19 +51,6 @@ Foam::fileName Foam::functionObjectList::functionObjectDictPath
 );
 
 
-const Foam::Enum
-<
-    Foam::functionObjectList::errorHandlingType
->
-Foam::functionObjectList::errorHandlingNames_
-({
-    { errorHandlingType::DEFAULT, "default" },
-    { errorHandlingType::WARN, "warn" },
-    { errorHandlingType::IGNORE, "ignore" },
-    { errorHandlingType::STRICT, "strict" },
-});
-
-
 // * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
 
 namespace Foam
@@ -396,12 +383,12 @@ bool Foam::functionObjectList::readFunctionObject
 }
 
 
-Foam::functionObjectList::errorHandlingType
+Foam::error::handlerTypes
 Foam::functionObjectList::getOrDefaultErrorHandling
 (
     const word& key,
     const dictionary& dict,
-    const errorHandlingType deflt
+    const error::handlerTypes deflt
 ) const
 {
     const entry* eptr = dict.findEntry(key, keyType::LITERAL);
@@ -418,16 +405,16 @@ Foam::functionObjectList::getOrDefaultErrorHandling
         {
             const word enumName(eptr->get<word>());
 
-            if (!errorHandlingNames_.found(enumName))
+            if (!error::handlerNames.found(enumName))
             {
                 // Failed the name lookup
                 FatalIOErrorInFunction(dict)
                     << enumName << " is not in enumeration: "
-                    << errorHandlingNames_ << nl
+                    << error::handlerNames << nl
                     << exit(FatalIOError);
             }
 
-            return errorHandlingNames_.get(enumName);
+            return error::handlerNames.get(enumName);
         }
     }
 
@@ -683,15 +670,15 @@ bool Foam::functionObjectList::execute()
 
         for (functionObject& funcObj : functions())
         {
-            const errorHandlingType errorHandling = *errIter;
+            const auto errorHandling = *errIter;
             ++errIter;
 
             const word& objName = funcObj.name();
 
             if
             (
-                errorHandling == errorHandlingType::WARN
-             || errorHandling == errorHandlingType::IGNORE
+                errorHandling == error::handlerTypes::WARN
+             || errorHandling == error::handlerTypes::IGNORE
             )
             {
                 // Throw FatalError, FatalIOError as exceptions
@@ -715,12 +702,12 @@ bool Foam::functionObjectList::execute()
                 catch (const Foam::error& err)
                 {
                     // Treat IOerror and error identically
-                    uint32_t nWarnings;
+                    unsigned nWarnings;
                     hadError = true;
 
                     if
                     (
-                        errorHandling != errorHandlingType::IGNORE
+                        (errorHandling != error::handlerTypes::IGNORE)
                      && (nWarnings = ++warnings_(objName)) <= maxWarnings
                     )
                     {
@@ -761,11 +748,11 @@ bool Foam::functionObjectList::execute()
                 catch (const Foam::error& err)
                 {
                     // Treat IOerror and error identically
-                    uint32_t nWarnings;
+                    unsigned nWarnings;
 
                     if
                     (
-                        errorHandling != errorHandlingType::IGNORE
+                        (errorHandling != error::handlerTypes::IGNORE)
                      && (nWarnings = ++warnings_(objName)) <= maxWarnings
                     )
                     {
@@ -894,7 +881,7 @@ bool Foam::functionObjectList::end()
 
         for (functionObject& funcObj : functions())
         {
-            const errorHandlingType errorHandling = *errIter;
+            const auto errorHandling = *errIter;
             ++errIter;
 
             const word& objName = funcObj.name();
@@ -913,11 +900,11 @@ bool Foam::functionObjectList::end()
             catch (const Foam::error& err)
             {
                 // Treat IOerror and error identically
-                uint32_t nWarnings;
+                unsigned nWarnings;
 
                 if
                 (
-                    errorHandling != errorHandlingType::IGNORE
+                    (errorHandling != error::handlerTypes::IGNORE)
                  && (nWarnings = ++warnings_(objName)) <= maxWarnings
                 )
                 {
@@ -1025,7 +1012,7 @@ bool Foam::functionObjectList::read()
         errorHandling_.resize
         (
             functionsDict.size(),
-            errorHandlingType::DEFAULT
+            error::handlerTypes::DEFAULT
         );
 
         HashTable<label> newIndices;
@@ -1041,12 +1028,12 @@ bool Foam::functionObjectList::read()
         );
 
         // Top-level "errors" specification (optional)
-        const errorHandlingType errorHandlingFallback =
+        const error::handlerTypes errorHandlingFallback =
             getOrDefaultErrorHandling
             (
                 "errors",
                 functionsDict,
-                errorHandlingType::DEFAULT
+                error::handlerTypes::DEFAULT
             );
 
         label nFunc = 0;
@@ -1071,7 +1058,7 @@ bool Foam::functionObjectList::read()
             bool enabled = dict.getOrDefault("enabled", true);
 
             // Per-function "errors" specification
-            const errorHandlingType errorHandling =
+            const error::handlerTypes errorHandling =
                 getOrDefaultErrorHandling
                 (
                     "errors",
@@ -1161,16 +1148,16 @@ bool Foam::functionObjectList::read()
 
                     switch (errorHandling)
                     {
-                        case errorHandlingType::IGNORE:
+                        case error::handlerTypes::IGNORE:
                             break;
 
-                        case errorHandlingType::STRICT:
+                        case error::handlerTypes::STRICT:
                         {
                             exitNow(err);
                             break;
                         }
 
-                        case errorHandlingType::DEFAULT:
+                        case error::handlerTypes::DEFAULT:
                         {
                             if (isA<Foam::IOerror>(err))
                             {
@@ -1183,7 +1170,7 @@ bool Foam::functionObjectList::read()
                             [[fallthrough]];
                         }
 
-                        case errorHandlingType::WARN:
+                        case error::handlerTypes::WARN:
                         {
                             // Trickery to get original message
                             err.write(Warning, false);
diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H
index b96c665693e..c79f38f5282 100644
--- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H
+++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2015-2020 OpenCFD Ltd.
+    Copyright (C) 2015-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -77,11 +77,10 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef functionObjectList_H
-#define functionObjectList_H
+#ifndef Foam_functionObjectList_H
+#define Foam_functionObjectList_H
 
 #include "PtrList.H"
-#include "Enum.H"
 #include "functionObject.H"
 #include "SHA1Digest.H"
 #include "HashTable.H"
@@ -106,25 +105,10 @@ class functionObjectList
 :
     private PtrList<functionObject>
 {
-    // Data Types
-
-        //- Handling of construction or execution errors
-        enum class errorHandlingType : uint8_t
-        {
-            DEFAULT = 0,  //!< Warn on construct, Fatal on runtime
-            WARN,         //!< Warn on construct, Warn on runtime
-            IGNORE,       //!< Ignore on construct, Ignore on runtime
-            STRICT,       //!< Fatal on construct, Fatal on runtime
-        };
-
-        //- Names for error handling types
-        static const Enum<errorHandlingType> errorHandlingNames_;
-
-
     // Private Data
 
         //- A list of error/warning handling
-        List<errorHandlingType> errorHandling_;
+        List<error::handlerTypes> errorHandling_;
 
         //- A list of SHA1 digests for the function object dictionaries
         List<SHA1Digest> digests_;
@@ -135,7 +119,7 @@ class functionObjectList
         //- Track the number of warnings per function object and limit
         //  to a predefined number to avoid flooding the display.
         //  Clear on re-read of functions.
-        HashTable<uint32_t> warnings_;
+        HashTable<unsigned> warnings_;
 
         //- Reference to Time
         const Time& time_;
@@ -185,11 +169,11 @@ class functionObjectList
         //
         //  This additional treatment is to ensure that potentially existing
         //  code with an "errors" functionObject will continue to run.
-        errorHandlingType getOrDefaultErrorHandling
+        error::handlerTypes getOrDefaultErrorHandling
         (
             const word& key,
             const dictionary& dict,
-            const errorHandlingType deflt
+            const error::handlerTypes deflt
         ) const;
 
 
-- 
GitLab