diff --git a/src/OpenFOAM/dimensionSet/dimensionSets.C b/src/OpenFOAM/dimensionSet/dimensionSets.C index 7486781df8a08ee5a0cfe30cdf8f1af628b9ac69..10b424a57634266f82ff37fb0fbf83579f0db7aa 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 999b4cb292d2c794009f1efad50ee8ca255744b9..c7cfcc71866cecf1304f8d9d7ed01de4a52d9788 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