From 0f86a786736461504b24c65ff47c7a03b7136715 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Tue, 17 Dec 2013 08:55:07 +0000 Subject: [PATCH] ENH: MeshObject: add selective clearing function --- src/OpenFOAM/meshes/MeshObject/MeshObject.C | 28 +++++++++++++++++++++ src/OpenFOAM/meshes/MeshObject/MeshObject.H | 10 ++++++++ 2 files changed, 38 insertions(+) diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.C b/src/OpenFOAM/meshes/MeshObject/MeshObject.C index 1a8ebe937a6..546c3d1c98d 100644 --- a/src/OpenFOAM/meshes/MeshObject/MeshObject.C +++ b/src/OpenFOAM/meshes/MeshObject/MeshObject.C @@ -374,4 +374,32 @@ void Foam::meshObject::clear(objectRegistry& obr) } +template +< + class Mesh, + template<class> class FromType, + template<class> class ToType +> +void Foam::meshObject::clearUpto(objectRegistry& obr) +{ + HashTable<FromType<Mesh>*> meshObjects + ( + obr.lookupClass<FromType<Mesh> >() + ); + + forAllIter(typename HashTable<FromType<Mesh>*>, meshObjects, iter) + { + if (!isA<ToType<Mesh> >(*iter())) + { + if (meshObject::debug) + { + Pout<< "meshObject::clearUpto(objectRegistry&) : destroying " + << iter()->name() << endl; + } + obr.checkOut(*iter()); + } + } +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.H b/src/OpenFOAM/meshes/MeshObject/MeshObject.H index b95c631e52f..bc844bd1eb1 100644 --- a/src/OpenFOAM/meshes/MeshObject/MeshObject.H +++ b/src/OpenFOAM/meshes/MeshObject/MeshObject.H @@ -182,6 +182,16 @@ public: template<class Mesh, template<class> class MeshObjectType> static void clear(objectRegistry&); + + //- Clear all meshObject derived from FromType up to (but not including) + // ToType. Used to clear e.g. all non-updateable meshObjects + template + < + class Mesh, + template<class> class FromType, + template<class> class ToType + > + static void clearUpto(objectRegistry&); }; -- GitLab