diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.C b/src/OpenFOAM/meshes/MeshObject/MeshObject.C index 1a8ebe937a6ce362bb63416f86e4b5f19fcec050..546c3d1c98dc2afb8e48a1ad6efde01989ede031 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 b95c631e52fe1147c297d3d2645ad93130fe6d2a..bc844bd1eb1c05203394eb61b24e0a1414792780 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&); };