Salome HOME
Speed up "Clear mesh data"
[modules/smesh.git] / src / SMESHDS / SMESHDS_SubMesh.cxx
index 4218db744e24a4e62c38a5a0b53791e60575206d..0da2a95f83e741ce6f6e57f5cf3d3ada753d6e41 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
@@ -29,6 +29,7 @@
 #include "SMESHDS_SubMesh.hxx"
 
 #include "utilities.h"
+#include "SMDS_SetIterator.hxx"
 
 using namespace std;
 
@@ -87,7 +88,11 @@ int SMESHDS_SubMesh::NbElements() const
     return myElements.size();
 
   int nbElems = 0;
+#ifndef WNT
   set<const SMESHDS_SubMesh*>::iterator it = mySubMeshes.begin();
+#else
+  set<const SMESHDS_SubMesh*>::const_iterator it = mySubMeshes.begin();
+#endif
   for ( ; it != mySubMeshes.end(); it++ )
     nbElems += (*it)->NbElements();
 
@@ -105,7 +110,11 @@ int SMESHDS_SubMesh::NbNodes() const
    return myNodes.size(); 
 
   int nbElems = 0;
+#ifndef WNT
   set<const SMESHDS_SubMesh*>::iterator it = mySubMeshes.begin();
+#else
+  set<const SMESHDS_SubMesh*>::const_iterator it = mySubMeshes.begin();
+#endif
   for ( ; it != mySubMeshes.end(); it++ )
     nbElems += (*it)->NbNodes();
 
@@ -289,3 +298,32 @@ bool SMESHDS_SubMesh::ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const
 {
   return mySubMeshes.find( theSubMesh ) != mySubMeshes.end();
 }
+
+//=======================================================================
+//function : GetSubMeshIterator
+//purpose  : 
+//=======================================================================
+
+SMESHDS_SubMeshIteratorPtr SMESHDS_SubMesh::GetSubMeshIterator() const
+{
+  typedef set<const SMESHDS_SubMesh*>::const_iterator TIterator;
+  return SMESHDS_SubMeshIteratorPtr
+    ( new SMDS_SetIterator< const SMESHDS_SubMesh*, TIterator >( mySubMeshes.begin(),
+                                                                 mySubMeshes.end()));
+}
+
+//=======================================================================
+//function : Clear
+//purpose  : remove the contents
+//=======================================================================
+
+void SMESHDS_SubMesh::Clear()
+{
+  myElements.clear();
+  myNodes.clear();
+  SMESHDS_SubMeshIteratorPtr sub = GetSubMeshIterator();
+  while ( sub->more() ) {
+    if ( SMESHDS_SubMesh* sm = (SMESHDS_SubMesh*) sub->next())
+      sm->Clear();
+  }
+}