diff --git a/src/OpenFOAM/expressions/exprOps/exprOps.H b/src/OpenFOAM/expressions/exprOps/exprOps.H new file mode 100644 index 0000000000..ec8c6d076d --- /dev/null +++ b/src/OpenFOAM/expressions/exprOps/exprOps.H @@ -0,0 +1,136 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2019 OpenCFD Ltd. +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +InNamespace + Foam::expressions + +Description + Operations involving expressions. + +SourceFiles + exprOps.H + +\*---------------------------------------------------------------------------*/ + +#ifndef exprOps_H +#define exprOps_H + +#include "scalar.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Namespace expressions Declarations +\*---------------------------------------------------------------------------*/ + +namespace expressions +{ + +//- Convert [0-1] values (usually scalars) as false/true +template +struct boolOp +{ + bool operator()(const T& val) const + { + return (0.5 < Foam::mag(val)); + } +}; + +//- Inverse of boolOp() +template +struct boolNotOp +{ + bool operator()(const T& val) const + { + return (Foam::mag(val) < 0.5); + } +}; + +//- Convert to bool, pass-through for bool +template<> +struct boolOp +{ + bool operator()(bool val) const + { + return val; + } +}; + +//- Inverse of boolOp, no conversion required for bool +template<> +struct boolNotOp +{ + bool operator()(bool val) const + { + return !val; + } +}; + +//- Logical 'and', possibly with scalars as (false, true) values +template +struct boolAndOp +{ + bool operator()(const T& a, const T& b) const + { + return (boolOp()(a) && boolOp()(b)); + } +}; + +//- Logical 'or', possibly with scalars as (false, true) values +template +struct boolOrOp +{ + bool operator()(const T& a, const T& b) const + { + return (boolOp()(a) || boolOp()(b)); + } +}; + +//- Logical 'xor', possibly with scalars as (false, true) values +template +struct boolXorOp +{ + bool operator()(const T& a, const T& b) const + { + return (boolOp()(a) != boolOp()(b)); + } +}; + + +} // End namespace expressions + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/expressions/exprTools/exprTools.H b/src/OpenFOAM/expressions/exprTools/exprTools.H index d720586633..c780388921 100644 --- a/src/OpenFOAM/expressions/exprTools/exprTools.H +++ b/src/OpenFOAM/expressions/exprTools/exprTools.H @@ -38,8 +38,8 @@ SourceFiles #ifndef exprTools_H #define exprTools_H +#include "exprOps.H" #include "exprString.H" -#include "scalar.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -47,7 +47,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Namespace exprTools Declaration + Namespace exprTools Declarations \*---------------------------------------------------------------------------*/ namespace exprTools @@ -100,81 +100,9 @@ List getList ); -// Boolean-like values - -//- Convert [0-1] values (usually scalars) as false/true -template -struct toBoolOp -{ - int operator()(const T& val) const - { - return (0.5 < Foam::mag(val)); - } -}; - -//- No conversion needed for bool -template<> -struct toBoolOp -{ - int operator()(bool val) const - { - return val; - } -}; - -//- Inverse test of toBoolOp() -template -struct toBoolNotOp -{ - int operator()(const T& val) const - { - return (Foam::mag(val) < 0.5); - } -}; - -//- Inverse test of toBoolOp, no conversion needed for bool -template<> -struct toBoolNotOp -{ - int operator()(bool val) const - { - return !val; - } -}; - -//- Logical 'and' with scalars as (false, true) values -template -struct toBoolAndOp -{ - int operator()(const T& a, const T& b) const - { - return (toBoolOp()(a) && toBoolOp()(b)); - } -}; - -//- Logical 'or' with scalars as (false, true) values -template -struct toBoolOrOp -{ - int operator()(const T& a, const T& b) const - { - return (toBoolOp()(a) || toBoolOp()(b)); - } -}; - -//- Logical 'xor' with scalars as (false, true) values -template -struct toBoolXorOp -{ - int operator()(const T& a, const T& b) const - { - return (toBoolOp()(a) ? toBoolNotOp()(b) : toBoolOp()(b)); - } -}; - - } // End namespace exprTools + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam