From 339844e1a25e0f3cd40b3168eedd628c8cf49106 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Thu, 3 Jan 2013 08:53:44 +0000 Subject: [PATCH] BUG: DimensionSets: stored reference instead of dictionary --- src/OpenFOAM/dimensionSet/dimensionSets.C | 31 ++++++++++++++------- src/OpenFOAM/global/debug/debug.C | 33 +++++++++-------------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/OpenFOAM/dimensionSet/dimensionSets.C b/src/OpenFOAM/dimensionSet/dimensionSets.C index 7486781df8a..10b424a5763 100644 --- a/src/OpenFOAM/dimensionSet/dimensionSets.C +++ b/src/OpenFOAM/dimensionSet/dimensionSets.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,15 +35,29 @@ namespace Foam /* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ -dictionary* dimensionSystemsPtr_(NULL); +//- Since dimensionSystems() can be reread we actually store a copy of +// the controlDict subDict (v.s. a reference to the subDict for e.g. +// dimensionedConstants) +autoPtr<dictionary> dimensionSystemsPtr_(NULL); dictionary& dimensionSystems() { - return debug::switchSet - ( - "DimensionSets", - dimensionSystemsPtr_ - ); + if (!dimensionSystemsPtr_.valid()) + { + dictionary* cachedPtr = NULL; + dimensionSystemsPtr_.reset + ( + new dictionary + ( + debug::switchSet + ( + "DimensionSets", + cachedPtr + ) + ) + ); + } + return dimensionSystemsPtr_(); } @@ -63,10 +77,9 @@ public: {} virtual void readData(Foam::Istream& is) { - deleteDemandDrivenData(dimensionSystemsPtr_); unitSetPtr_.clear(); writeUnitSetPtr_.clear(); - dimensionSystemsPtr_ = new dictionary(is); + dimensionSystemsPtr_.reset(new dictionary(is)); } virtual void writeData(Foam::Ostream& os) const { diff --git a/src/OpenFOAM/global/debug/debug.C b/src/OpenFOAM/global/debug/debug.C index 999b4cb292d..c7cfcc71866 100644 --- a/src/OpenFOAM/global/debug/debug.C +++ b/src/OpenFOAM/global/debug/debug.C @@ -47,47 +47,38 @@ dictionary* debugSwitchesPtr_(NULL); dictionary* infoSwitchesPtr_(NULL); dictionary* optimisationSwitchesPtr_(NULL); -// to ensure controlDictPtr_ is deleted at the end of the run -class deleteControlDictPtr -{ -public: - - deleteControlDictPtr() - {} - - ~deleteControlDictPtr() - { - deleteDemandDrivenData(controlDictPtr_); - } -}; - -deleteControlDictPtr deleteControlDictPtr_; - - // Debug switch read and write callback tables. simpleObjectRegistry* debugObjectsPtr_(NULL); simpleObjectRegistry* infoObjectsPtr_(NULL); simpleObjectRegistry* optimisationObjectsPtr_(NULL); simpleObjectRegistry* dimensionSetObjectsPtr_(NULL); simpleObjectRegistry* dimensionedConstantObjectsPtr_(NULL); -class deleteDebugSwitchPtr + + +// to ensure controlDictPtr_ is deleted at the end of the run +class deleteControlDictPtr { public: - deleteDebugSwitchPtr() + deleteControlDictPtr() {} - ~deleteDebugSwitchPtr() + ~deleteControlDictPtr() { deleteDemandDrivenData(debugObjectsPtr_); deleteDemandDrivenData(infoObjectsPtr_); deleteDemandDrivenData(optimisationObjectsPtr_); deleteDemandDrivenData(dimensionSetObjectsPtr_); deleteDemandDrivenData(dimensionedConstantObjectsPtr_); + + debugSwitchesPtr_ = NULL; + infoSwitchesPtr_ = NULL; + optimisationSwitchesPtr_ = NULL; + deleteDemandDrivenData(controlDictPtr_); } }; -deleteDebugSwitchPtr deleteDebugSwitchPtr_; +deleteControlDictPtr deleteControlDictPtr_; //! \endcond -- GitLab