X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHDS%2FSMESHDS_SubMesh.hxx;h=3a31915c44685922bbc9f7dff3d3c0ef46bc73c0;hp=9a9d61f63db944e90b705aa40d657d1423cd43c5;hb=2f529dcd2629679dadcca3047583bfcf28ca7b1a;hpb=6b1de623316c78e9bc6e18b7e2a98883bd800ff1 diff --git a/src/SMESHDS/SMESHDS_SubMesh.hxx b/src/SMESHDS/SMESHDS_SubMesh.hxx index 9a9d61f63..3a31915c4 100644 --- a/src/SMESHDS/SMESHDS_SubMesh.hxx +++ b/src/SMESHDS/SMESHDS_SubMesh.hxx @@ -29,31 +29,33 @@ #include "SMESH_SMESHDS.hxx" +#include "SMDS_ElementHolder.hxx" #include "SMDS_Mesh.hxx" -#include #include +#include +class SMESHDS_SubMesh; +typedef boost::container::flat_set< const SMESHDS_SubMesh* > TSubMeshSet; + class SMESHDS_SubMesh; typedef SMDS_Iterator SMESHDS_SubMeshIterator; typedef boost::shared_ptr< SMESHDS_SubMeshIterator > SMESHDS_SubMeshIteratorPtr; class SMESHDS_Mesh; -class SMESHDS_EXPORT SMESHDS_SubMesh +class SMESHDS_EXPORT SMESHDS_SubMesh : public SMDS_ElementHolder { public: - SMESHDS_SubMesh(SMESHDS_Mesh *parent, int index); + SMESHDS_SubMesh(const SMESHDS_Mesh *parent, int index); virtual ~SMESHDS_SubMesh(); virtual bool IsComplexSubmesh() const { return !mySubMeshes.empty(); } // if !IsComplexSubmesh() virtual void AddElement(const SMDS_MeshElement * ME); - virtual bool RemoveElement(const SMDS_MeshElement * ME, bool isElemDeleted); // ret true if ME was in + virtual bool RemoveElement(const SMDS_MeshElement * ME); // ret true if ME was in virtual void AddNode(const SMDS_MeshNode * ME); - virtual bool RemoveNode(const SMDS_MeshNode * ME, bool isNodeDeleted); // ret true if ME was in - virtual const SMDS_MeshElement* GetElement( size_t idInShape ) const; - virtual const SMDS_MeshNode* GetNode ( size_t idInShape ) const; + virtual bool RemoveNode(const SMDS_MeshNode * ME); // ret true if ME was in // if IsComplexSubmesh() void AddSubMesh( const SMESHDS_SubMesh* theSubMesh ); @@ -65,29 +67,33 @@ class SMESHDS_EXPORT SMESHDS_SubMesh // for both types virtual int NbElements() const; - virtual SMDS_ElemIteratorPtr GetElements(bool reverse=false) const; virtual int NbNodes() const; - virtual SMDS_NodeIteratorPtr GetNodes(bool reverse=false) const; + virtual SMDS_ElemIteratorPtr GetElements() const; + virtual SMDS_NodeIteratorPtr GetNodes() const; virtual bool Contains(const SMDS_MeshElement * ME) const; // check if elem or node is in virtual bool IsQuadratic() const; // clear the contents virtual void Clear(); - int getSize(); - void compactList(); SMESHDS_Mesh* GetParent() const { return const_cast< SMESHDS_Mesh*>( myParent ); } int GetID() const { return myIndex; } + protected: // methods of SMDS_ElementHolder + + virtual SMDS_ElemIteratorPtr getElements(); + virtual void tmpClear(); + virtual void add( const SMDS_MeshElement* element ); + virtual void compact() {} + private: - SMESHDS_Mesh * myParent; - std::vector myElements; - std::vector myNodes; - int myUnusedIdNodes; - int myUnusedIdElements; - int myIndex; + int myIndex; + int myNbElements; + int myNbNodes; + const SMDS_MeshElement* my1stElemNode[2]; // elem and node with least ID, to optimize iteration + const SMESHDS_Mesh * myParent; + TSubMeshSet mySubMeshes; - std::set mySubMeshes; }; #endif