From e5b3af9c0538ecaeb3461a92eb629837a4f2549f Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Fri, 8 Feb 2019 16:51:54 +0100 Subject: [PATCH] ENH: add failsafe version of Enum::get() --- src/OpenFOAM/primitives/enums/Enum.C | 20 +++++++++++++++++++- src/OpenFOAM/primitives/enums/Enum.H | 6 +++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/primitives/enums/Enum.C b/src/OpenFOAM/primitives/enums/Enum.C index f74a393a562..1e269ff4ede 100644 --- a/src/OpenFOAM/primitives/enums/Enum.C +++ b/src/OpenFOAM/primitives/enums/Enum.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2017-2018 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -77,6 +77,24 @@ EnumType Foam::Enum<EnumType>::get(const word& enumName) const } +template<class EnumType> +EnumType Foam::Enum<EnumType>::get +( + const word& enumName, + const EnumType defaultValue +) const +{ + const label idx = find(enumName); + + if (idx < 0) + { + return defaultValue; + } + + return EnumType(vals_[idx]); +} + + template<class EnumType> EnumType Foam::Enum<EnumType>::read(Istream& is) const { diff --git a/src/OpenFOAM/primitives/enums/Enum.H b/src/OpenFOAM/primitives/enums/Enum.H index 25b73632e69..b5ef2a36244 100644 --- a/src/OpenFOAM/primitives/enums/Enum.H +++ b/src/OpenFOAM/primitives/enums/Enum.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2017-2018 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -130,6 +130,10 @@ public: // FatalError if not found. EnumType get(const word& enumName) const; + //- The enumeration corresponding to the given name. + // \return The enumeration or default if not found. + EnumType get(const word& enumName, const EnumType defaultValue) const; + //- The name corresponding to the given enumeration. // Return an empty word if not found. inline const word& get(const EnumType e) const; -- GitLab