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