X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_MeshGroup.cxx;h=c41409c70e00e4702b347834f34c838d1cd0dae9;hp=4040a3e1d2193e2d205cdc436c7d467a5b1dc19e;hb=cc85955178440fffe36eef234d759e3c3590248f;hpb=7a3ecab720cc517ace17c5c4677fd3c20c0051ee diff --git a/src/SMDS/SMDS_MeshGroup.cxx b/src/SMDS/SMDS_MeshGroup.cxx index 4040a3e1d..c41409c70 100644 --- a/src/SMDS/SMDS_MeshGroup.cxx +++ b/src/SMDS/SMDS_MeshGroup.cxx @@ -30,89 +30,33 @@ #endif #include "SMDS_MeshGroup.hxx" -#include "utilities.h" -using namespace std; +#include "SMDS_SetIterator.hxx" +#include "ObjectPool.hxx" -//======================================================================= -//function : SMDS_MeshGroup -//purpose : -//======================================================================= +#include -SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh * theMesh, - const SMDSAbs_ElementType theType) - :myMesh(theMesh),myType(theType), myParent(NULL), myTic(0) -{ -} +#include //======================================================================= //function : SMDS_MeshGroup -//purpose : +//purpose : //======================================================================= -SMDS_MeshGroup::SMDS_MeshGroup(SMDS_MeshGroup * theParent, +SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh * theMesh, const SMDSAbs_ElementType theType) - :myMesh(theParent->myMesh),myType(theType), myParent(theParent) -{ -} - -//======================================================================= -//function : AddSubGroup -//purpose : -//======================================================================= - -const SMDS_MeshGroup *SMDS_MeshGroup::AddSubGroup - (const SMDSAbs_ElementType theType) -{ - const SMDS_MeshGroup * subgroup = new SMDS_MeshGroup(this,theType); - myChildren.insert(myChildren.end(),subgroup); - return subgroup; -} - -//======================================================================= -//function : RemoveSubGroup -//purpose : -//======================================================================= - -bool SMDS_MeshGroup::RemoveSubGroup(const SMDS_MeshGroup * theGroup) + : SMDS_ElementHolder( theMesh ), myType( theType ), myTic( 0 ) { - bool found = false; - list::iterator itgroup; - for(itgroup=myChildren.begin(); itgroup!=myChildren.end(); itgroup++) - { - const SMDS_MeshGroup* subgroup=*itgroup; - if (subgroup == theGroup) - { - found = true; - myChildren.erase(itgroup); - } - } - - return found; } -//======================================================================= -//function : RemoveFromParent -//purpose : -//======================================================================= - -bool SMDS_MeshGroup::RemoveFromParent() -{ - - if (myParent==NULL) return false; - else - { - return (myParent->RemoveSubGroup(this)); - } -} //======================================================================= //function : Clear -//purpose : +//purpose : //======================================================================= void SMDS_MeshGroup::Clear() { - myElements.clear(); + clearVector( myElements ); myType = SMDSAbs_All; ++myTic; } @@ -125,31 +69,32 @@ void SMDS_MeshGroup::Clear() bool SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem) { // the type of the group is determined by the first element added - if (myElements.empty()) { + if ( myElements.empty() ) { myType = theElem->GetType(); } - else if (theElem->GetType() != myType) { + else if ( theElem->GetType() != myType ) { MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<GetType()<<"!="<::iterator found = myElements.find(theElem); + TElementSet::iterator found = myElements.find(theElem); if ( found != myElements.end() ) { - myElements.erase(found); - if (myElements.empty()) myType = SMDSAbs_All; + myElements.erase( found ); + if ( myElements.empty() ) myType = SMDSAbs_All; ++myTic; return true; } @@ -158,12 +103,12 @@ bool SMDS_MeshGroup::Remove(const SMDS_MeshElement * theElem) //======================================================================= //function : Contains -//purpose : +//purpose : //======================================================================= bool SMDS_MeshGroup::Contains(const SMDS_MeshElement * theElem) const { - return myElements.find(theElem) != myElements.end(); + return myElements.find( theElem ) != myElements.end(); } //======================================================================= @@ -176,3 +121,37 @@ void SMDS_MeshGroup::SetType(const SMDSAbs_ElementType theType) if (IsEmpty()) myType = theType; } + +//======================================================================= +//function : GetElements +//purpose : +//======================================================================= + +SMDS_ElemIteratorPtr SMDS_MeshGroup::GetElements() const +{ + typedef SMDS_SetIterator< const SMDS_MeshElement*, TIterator > TSetIterator; + return boost::make_shared< TSetIterator >( myElements.begin(), myElements.end() ); +} + +//======================================================================= +//function : Move contents of another group +//purpose : +//======================================================================= + +void SMDS_MeshGroup::operator=( SMDS_MeshGroup && other ) +{ + myMesh = other.myMesh; + myType = other.myType; + myElements = std::move( other.myElements ); + ++myTic; +} + +//======================================================================= +//function : tmpClear +//purpose : temporary remove its elements before mesh compacting +//======================================================================= + +void SMDS_MeshGroup::tmpClear() +{ + myElements.clear(); +}