diff --git a/src/OpenFOAM/expressions/exprResult/exprResultDelayed.C b/src/OpenFOAM/expressions/exprResult/exprResultDelayed.C index dfd43f13a2..1108ec20b1 100644 --- a/src/OpenFOAM/expressions/exprResult/exprResultDelayed.C +++ b/src/OpenFOAM/expressions/exprResult/exprResultDelayed.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2012-2018 Bernhard Gschaider - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -41,7 +41,7 @@ namespace Foam { namespace expressions { - defineTypeNameAndDebug(exprResultDelayed, 0); + defineTypeName(exprResultDelayed); addToRunTimeSelectionTable ( diff --git a/src/OpenFOAM/expressions/exprResult/exprResultDelayed.H b/src/OpenFOAM/expressions/exprResult/exprResultDelayed.H index c969356e0d..998a5021bc 100644 --- a/src/OpenFOAM/expressions/exprResult/exprResultDelayed.H +++ b/src/OpenFOAM/expressions/exprResult/exprResultDelayed.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2012-2018 Bernhard Gschaider - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -106,12 +106,12 @@ protected: public: //- Runtime type information - TypeName("exprResultDelayed"); + TypeNameNoDebug("exprResultDelayed"); // Constructors - //- Construct null + //- Default construct exprResultDelayed(); //- Copy construct diff --git a/src/OpenFOAM/expressions/exprResult/exprResultGlobals.C b/src/OpenFOAM/expressions/exprResult/exprResultGlobals.C index 04e270d641..f4b12a15eb 100644 --- a/src/OpenFOAM/expressions/exprResult/exprResultGlobals.C +++ b/src/OpenFOAM/expressions/exprResult/exprResultGlobals.C @@ -36,16 +36,12 @@ namespace Foam namespace expressions { - defineTypeNameAndDebug(exprResultGlobals, 0); + defineTypeName(exprResultGlobals); } // End namespace expressions } // End namespace Foam -Foam::autoPtr - Foam::expressions::exprResultGlobals::singleton_; - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::expressions::exprResultGlobals::exprResultGlobals @@ -57,32 +53,28 @@ Foam::expressions::exprResultGlobals::exprResultGlobals ( IOobject ( - "exprResultGlobals", - obr.time().timeName(), - "expressions", + exprResultGlobals::typeName, + obr.time().timeName(), // instance + "expressions", // local obr.time(), IOobject::READ_IF_PRESENT, - IOobject::AUTO_WRITE + IOobject::AUTO_WRITE, + true // register ) ), + variables_(), timeIndex_(obr.time().timeIndex()) { if (headerOk()) { readData ( - readStream("exprResultGlobals", true) + readStream(exprResultGlobals::typeName, true) ); } } -Foam::expressions::exprResultGlobals::Table::Table() -: - HashPtrTable() -{} - - Foam::expressions::exprResultGlobals::Table::Table(const Table& tbl) : HashPtrTable(tbl.capacity()) @@ -120,6 +112,52 @@ void Foam::expressions::exprResultGlobals::reset() } +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +Foam::expressions::exprResultGlobals& +Foam::expressions::exprResultGlobals::New +( + const objectRegistry& obr +) +{ + typedef expressions::exprResultGlobals Type; + + auto* ptr = obr.time().getObjectPtr(Type::typeName); + + if (!ptr) + { + ptr = new Type(obr); + ptr->store(); + } + else if (ptr->timeIndex_ != obr.time().timeIndex()) + { + // If time changes, reset variables + + ptr->timeIndex_ = obr.time().timeIndex(); + ptr->reset(); + } + + return *ptr; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +bool Foam::expressions::exprResultGlobals::Delete(const objectRegistry& obr) +{ + typedef expressions::exprResultGlobals Type; + + auto* ptr = obr.time().getObjectPtr(Type::typeName); + + if (ptr) + { + return obr.time().checkOut(ptr); + } + + return false; +} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // bool Foam::expressions::exprResultGlobals::writeData(Ostream& os) const @@ -148,29 +186,6 @@ bool Foam::expressions::exprResultGlobals::readData(Istream& is) } -Foam::expressions::exprResultGlobals& -Foam::expressions::exprResultGlobals::New -( - const objectRegistry& obr -) -{ - if (!singleton_) - { - singleton_.reset(new exprResultGlobals(obr)); - } - - if (singleton_->timeIndex_ != obr.time().timeIndex()) - { - // Time changes, reset variables - - singleton_->timeIndex_ = obr.time().timeIndex(); - singleton_->reset(); - } - - return *singleton_; -} - - Foam::expressions::exprResultGlobals::Table& Foam::expressions::exprResultGlobals::getNamespace(const word& name) { @@ -187,11 +202,11 @@ Foam::expressions::exprResultGlobals::get { for (const word& scopeName : scopes) { - const auto tableIter = variables_.find(scopeName); + const auto tableIter = variables_.cfind(scopeName); if (tableIter.found()) { - const auto resultIter = (*tableIter).find(name); + const auto resultIter = (*tableIter).cfind(name); if (resultIter.found()) { @@ -239,26 +254,6 @@ Foam::expressions::exprResultGlobals::addValue } -Foam::expressions::exprResult& -Foam::expressions::exprResultGlobals::addValue -( - const word& name, - const word& scope, - autoPtr& value, - const bool overwrite -) -{ - Table& tbl = getOrCreateScope(scope); - - if (overwrite || !tbl.found(name)) - { - tbl.set(name, value); - } - - return *tbl[name]; -} - - Foam::expressions::exprResult& Foam::expressions::exprResultGlobals::addValue ( @@ -272,7 +267,7 @@ Foam::expressions::exprResultGlobals::addValue if (overwrite || !tbl.found(name)) { - tbl.set(name, value); + tbl.set(name, std::move(value)); } return *tbl[name]; diff --git a/src/OpenFOAM/expressions/exprResult/exprResultGlobals.H b/src/OpenFOAM/expressions/exprResult/exprResultGlobals.H index 764017b7a6..49a4dbc678 100644 --- a/src/OpenFOAM/expressions/exprResult/exprResultGlobals.H +++ b/src/OpenFOAM/expressions/exprResult/exprResultGlobals.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2012-2018 Bernhard Gschaider - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,7 +28,12 @@ Class Foam::expressions::exprResultGlobals Description - A globally available registry of expression results + A globally available registry of expression results. + These are currently registered on Time (may change in the future). + +Note + The storage mechanism is similar to a MeshObject, but always stores + on Time and flushes stale values according to the time index. SourceFiles exprResultGlobals.C @@ -69,10 +74,17 @@ public: { public: - Table(); + //- Default construct + Table() = default; + + //- Copy (clone) construct Table(const Table& tbl); + + //- Move construct Table(Table&& tbl); - Table(Istream& is); + + //- Read construct from stream + explicit Table(Istream& is); }; @@ -86,13 +98,10 @@ private: //- The currently (or previously) used time-index label timeIndex_; - //- Only one instance of this repository - static autoPtr singleton_; - // Private Member Functions - //- Construct + //- Construct on Time for registry explicit exprResultGlobals(const objectRegistry& obr); //- Reset all variables @@ -108,14 +117,17 @@ private: public: //- Runtime type information - TypeName("exprResultGlobals"); + TypeNameNoDebug("exprResultGlobals"); - // Constructors + // Selectors - //- Get the singleton + //- Static constructor for singleton static exprResultGlobals& New(const objectRegistry& obr); + //- Static destructor for singleton + static bool Delete(const objectRegistry& obr); + //- Destructor virtual ~exprResultGlobals() = default; @@ -143,15 +155,6 @@ public: const bool overwrite = true ); - //- Add named result to specified scope - exprResult& addValue - ( - const word& name, - const word& scope, - autoPtr& value, - const bool overwrite = true - ); - //- Add named result to specified scope exprResult& addValue ( diff --git a/src/OpenFOAM/expressions/exprResult/exprResultStored.C b/src/OpenFOAM/expressions/exprResult/exprResultStored.C index 9530ea9026..b0baeffd4f 100644 --- a/src/OpenFOAM/expressions/exprResult/exprResultStored.C +++ b/src/OpenFOAM/expressions/exprResult/exprResultStored.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2012-2018 Bernhard Gschaider - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -35,7 +35,7 @@ namespace Foam { namespace expressions { - defineTypeNameAndDebug(exprResultStored, 0); + defineTypeName(exprResultStored); addToRunTimeSelectionTable ( diff --git a/src/OpenFOAM/expressions/exprResult/exprResultStored.H b/src/OpenFOAM/expressions/exprResult/exprResultStored.H index cb9755dd4b..c06181733f 100644 --- a/src/OpenFOAM/expressions/exprResult/exprResultStored.H +++ b/src/OpenFOAM/expressions/exprResult/exprResultStored.H @@ -84,7 +84,7 @@ protected: public: //- Runtime type information - TypeName("exprResultStored"); + TypeNameNoDebug("exprResultStored"); // Constructors diff --git a/src/OpenFOAM/expressions/exprResult/exprResultStoredStack.C b/src/OpenFOAM/expressions/exprResult/exprResultStoredStack.C index 528b71ebdf..bd742580d3 100644 --- a/src/OpenFOAM/expressions/exprResult/exprResultStoredStack.C +++ b/src/OpenFOAM/expressions/exprResult/exprResultStoredStack.C @@ -36,7 +36,7 @@ namespace Foam namespace expressions { - defineTypeNameAndDebug(exprResultStoredStack,0); + defineTypeName(exprResultStoredStack); addToRunTimeSelectionTable ( diff --git a/src/OpenFOAM/expressions/exprResult/exprResultStoredStack.H b/src/OpenFOAM/expressions/exprResult/exprResultStoredStack.H index 1bdeab2a89..7a7bcc95a0 100644 --- a/src/OpenFOAM/expressions/exprResult/exprResultStoredStack.H +++ b/src/OpenFOAM/expressions/exprResult/exprResultStoredStack.H @@ -66,7 +66,7 @@ protected: public: //- Runtime type information - TypeName("exprResultStoredStack"); + TypeNameNoDebug("exprResultStoredStack"); // Constructors