ENH: relocate functionObjectList errorHandling types to error (#2966)

- was previously private within functionObjectList, now exposed from
  error as 'handlerTypes' and 'handlerNames' enumeration.
This commit is contained in:
Mark Olesen 2023-08-18 11:54:32 +02:00 committed by Andrew Heather
parent f49403969e
commit ff2abdf1f0
4 changed files with 67 additions and 64 deletions

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2014 OpenFOAM Foundation
Copyright (C) 2015-2021 OpenCFD Ltd.
Copyright (C) 2015-2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -37,8 +37,24 @@ Note
#include "StringStream.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 * * * * * * * * * * * * //
bool Foam::error::master(const label communicator)

View File

@ -53,8 +53,8 @@ SeeAlso
\*---------------------------------------------------------------------------*/
#ifndef error_H
#define error_H
#ifndef Foam_error_H
#define Foam_error_H
#include "messageStream.H"
#include <memory>
@ -66,6 +66,7 @@ namespace Foam
// Forward Declarations
class OStringStream;
template<class EnumType> class Enum;
/*---------------------------------------------------------------------------*\
Class error Declaration
@ -101,6 +102,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

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2015-2022 OpenCFD Ltd.
Copyright (C) 2015-2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -44,7 +44,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
(
@ -52,19 +52,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
@ -350,12 +337,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);
@ -372,16 +359,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);
}
}
@ -640,15 +627,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
@ -672,12 +659,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
)
{
@ -718,11 +705,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
)
{
@ -851,7 +838,7 @@ bool Foam::functionObjectList::end()
for (functionObject& funcObj : functions())
{
const errorHandlingType errorHandling = *errIter;
const auto errorHandling = *errIter;
++errIter;
const word& objName = funcObj.name();
@ -870,11 +857,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
)
{
@ -982,7 +969,7 @@ bool Foam::functionObjectList::read()
errorHandling_.resize
(
functionsDict.size(),
errorHandlingType::DEFAULT
error::handlerTypes::DEFAULT
);
HashTable<label> newIndices;
@ -998,12 +985,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;
@ -1045,7 +1032,7 @@ bool Foam::functionObjectList::read()
bool enabled = dict.getOrDefault("enabled", true);
// Per-function "errors" specification
const errorHandlingType errorHandling =
const error::handlerTypes errorHandling =
getOrDefaultErrorHandling
(
"errors",
@ -1135,16 +1122,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))
{
@ -1157,7 +1144,7 @@ bool Foam::functionObjectList::read()
[[fallthrough]];
}
case errorHandlingType::WARN:
case error::handlerTypes::WARN:
{
// Trickery to get original message
err.write(Warning, false);

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2015-2021 OpenCFD Ltd.
Copyright (C) 2015-2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -78,11 +78,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"
@ -108,25 +107,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_;
@ -137,7 +121,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_;
@ -187,11 +171,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;