using namespace std;
#include "SMESHDS_SubMesh.hxx"
-//=======================================================================
-//function : SMESHDS_SubMesh
-//purpose :
-//=======================================================================
-SMESHDS_SubMesh::SMESHDS_SubMesh(const SMDS_Mesh * M):myMesh(M)
-{
- myListOfEltIDIsUpdate = false;
- myListOfNodeIDIsUpdate = false;
-}
-
//=======================================================================
//function : AddElement
//purpose :
void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * ME)
{
myElements.insert(ME);
- myListOfEltIDIsUpdate = false;
}
//=======================================================================
void SMESHDS_SubMesh::RemoveElement(const SMDS_MeshElement * ME)
{
myElements.erase(ME);
- myListOfEltIDIsUpdate = false;
}
//=======================================================================
void SMESHDS_SubMesh::AddNode(const SMDS_MeshNode * N)
{
myNodes.insert(N);
- myListOfNodeIDIsUpdate = false;
}
//=======================================================================
void SMESHDS_SubMesh::RemoveNode(const SMDS_MeshNode * N)
{
myNodes.erase(N);
- myListOfNodeIDIsUpdate = false;
}
//=======================================================================
return myElements.size();
}
-//=======================================================================
-//function : GetElements
-//purpose :
-//=======================================================================
-const set<const SMDS_MeshElement*> & SMESHDS_SubMesh::GetElements()
-{
- return myElements;
-}
-
//=======================================================================
//function : NbNodes
//purpose :
return myNodes.size();
}
-//=======================================================================
-//function : GetNodes
-//purpose :
-//=======================================================================
-const set<const SMDS_MeshNode*> & SMESHDS_SubMesh::GetNodes() const
+template<typename T> class MySetIterator:public SMDS_Iterator<const T*>
{
- return myNodes;
-}
+ const set<const T*>& mySet;
+ set<const T*>::const_iterator myIt;
-//=======================================================================
-//function : GetIDElements
-//purpose :
-//=======================================================================
-const vector<int> & SMESHDS_SubMesh::GetIDElements()
-{
- if (!myListOfEltIDIsUpdate)
+ public:
+ MySetIterator(const set<const T*>& s):mySet(s), myIt(s.begin())
{
- myListOfEltID.clear();
- set<const SMDS_MeshElement*>::iterator it=myElements.begin();
- for (; it!=myElements.end(); it++)
- {
- myListOfEltID.push_back((*it)->GetID());
- }
- myListOfEltIDIsUpdate = true;
}
- return myListOfEltID;
-}
-//=======================================================================
-//function : GetIDNodes
-//purpose :
-//=======================================================================
-const vector<int> & SMESHDS_SubMesh::GetIDNodes()
-{
- if (!myListOfNodeIDIsUpdate)
+ bool more()
+ {
+ return myIt!=mySet.end();
+ }
+ const T* next()
{
- myListOfNodeID.clear();
- set<const SMDS_MeshNode*>::iterator it=myNodes.begin();
- for (; it!=myNodes.end(); it++)
- {
- myListOfNodeID.push_back((*it)->GetID());
- }
- myListOfNodeIDIsUpdate = true;
+ const T* t=*myIt;
+ myIt++;
+ return t;
}
- return myListOfNodeID;
+};
+///////////////////////////////////////////////////////////////////////////////
+///Return an iterator on the elements of submesh
+///The created iterator must be free by the caller
+///////////////////////////////////////////////////////////////////////////////
+SMDS_Iterator<const SMDS_MeshElement*> * SMESHDS_SubMesh::GetElements() const
+{
+ return new MySetIterator<SMDS_MeshElement>(myElements);
}
+
+///////////////////////////////////////////////////////////////////////////////
+///Return an iterator on the nodes of submesh
+///The created iterator must be free by the caller
+///////////////////////////////////////////////////////////////////////////////
+SMDS_Iterator<const SMDS_MeshNode*> * SMESHDS_SubMesh::GetNodes() const
+{
+ return new MySetIterator<SMDS_MeshNode>(myNodes);
+}
+