From 5635e14f8194ff3746aa3d75e9d5e2fc60dd3513 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 30 Jun 2023 18:43:41 +0200 Subject: [PATCH] ENH: add low-level polymorphic/boxed exprValue - primarily for handling expression results, but can also be used as a universal value holder. Has some characteristics suitable for type-less IO: eg, is_integral(), nComponents() ENH: add is_pointer() check for expression scanToken --- .../test/exprTraits/Test-exprTraits.C | 53 +-- applications/test/exprValue/Make/files | 3 + applications/test/exprValue/Make/options | 2 + applications/test/exprValue/Test-exprValue.C | 141 +++++++ src/OpenFOAM/Make/files | 1 + .../expressions/exprString/exprString.H | 2 +- .../expressions/scanToken/exprScanToken.C | 18 +- .../expressions/scanToken/exprScanToken.H | 16 +- src/OpenFOAM/expressions/traits/exprTraits.C | 112 ++++-- src/OpenFOAM/expressions/traits/exprTraits.H | 83 ++++- src/OpenFOAM/expressions/value/exprValue.C | 341 +++++++++++++++++ src/OpenFOAM/expressions/value/exprValue.H | 348 ++++++++++++++++++ src/OpenFOAM/expressions/value/exprValueI.H | 213 +++++++++++ 13 files changed, 1243 insertions(+), 90 deletions(-) create mode 100644 applications/test/exprValue/Make/files create mode 100644 applications/test/exprValue/Make/options create mode 100644 applications/test/exprValue/Test-exprValue.C create mode 100644 src/OpenFOAM/expressions/value/exprValue.C create mode 100644 src/OpenFOAM/expressions/value/exprValue.H create mode 100644 src/OpenFOAM/expressions/value/exprValueI.H diff --git a/applications/test/exprTraits/Test-exprTraits.C b/applications/test/exprTraits/Test-exprTraits.C index f6a835871d..ab4bc40d15 100644 --- a/applications/test/exprTraits/Test-exprTraits.C +++ b/applications/test/exprTraits/Test-exprTraits.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2021 OpenCFD Ltd. + Copyright (C) 2021-2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM, distributed under GPL-3.0-or-later. @@ -17,8 +17,9 @@ Description #include "IOstreams.H" #include "ITstream.H" -#include "exprTraits.H" #include "uLabel.H" + +#include "exprTraits.H" #include "error.H" #include "stringList.H" #include "exprScanToken.H" @@ -27,16 +28,18 @@ using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -template +template void printTraits() { - const auto typeCode = exprTypeTraits::value; + const auto typeCode = exprTypeTraits::value; - Info<< "type " << pTraits::typeName - << " code:" << int(typeCode) - << " name:" << exprTypeTraits::name; + Info<< "Type '" << pTraits::typeName + << "' = code:" << int(typeCode) + << " rank:" << exprTypeTraits::rank + << " cmpt:" << exprTypeTraits::nComponents + << " name:" << exprTypeTraits::name; - if (pTraits::typeName != word(exprTypeTraits::name)) + if (pTraits::typeName != word(exprTypeTraits::name)) { Info<< " (UNSUPPORTED)"; } @@ -45,6 +48,17 @@ void printTraits() } +void print(const expressions::scanToken& tok) +{ + Info<< " type:" << int(tok.type_); + if (tok.is_pointer()) + { + Info<< " ptr:" << Foam::name(tok.name_); + } + Info<< nl; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main() @@ -56,6 +70,7 @@ int main() printTraits(); printTraits