X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHDS%2FSMESHDS_GroupOnFilter.hxx;h=b45e600ec1ccc60c29fa23a1fbe4413d267617fc;hb=fa6a0c1c316abc62ada8c4d33c216da3bcfffd61;hp=b1e33e5fc7ba4a9065bbdf074d9ec3df3f115f8f;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6;p=modules%2Fsmesh.git diff --git a/src/SMESHDS/SMESHDS_GroupOnFilter.hxx b/src/SMESHDS/SMESHDS_GroupOnFilter.hxx index b1e33e5fc..b45e600ec 100644 --- a/src/SMESHDS/SMESHDS_GroupOnFilter.hxx +++ b/src/SMESHDS/SMESHDS_GroupOnFilter.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -46,7 +46,18 @@ class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase SMESH_PredicatePtr GetPredicate() const { return myPredicate; } - virtual int Extent() const; + std::vector< int > GetMeshInfo() const; + + template< typename IDTYPE > + int GetElementIds( IDTYPE* ids ) const + { + return getElementIds( (void*)ids, sizeof(IDTYPE)); + } + + + virtual int Extent() const; + + virtual bool IsEmpty(); virtual bool Contains (const int theID); @@ -54,21 +65,30 @@ class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase virtual SMDS_ElemIteratorPtr GetElements() const; - virtual int GetID (const int theIndex); - - virtual int GetTic() const; + virtual int GetTic() const; - bool IsUpToDate() const; + bool IsUpToDate() const; private: void update() const; void setChanged(bool changed=true); + const SMDS_MeshElement* setNbElemToSkip( SMDS_ElemIteratorPtr& elIt ); + int getElementIds( void* ids, size_t idSize ) const; + + // We use two ways of optimaization: + // 1) The case of little free memory. Remember nb of KO elements (myNbElemToSkip) + // to skip before the first OK element. As well remember total nb of OK + // elements (myMeshInfo) to stop iteration as all OK elements are found. + // 2) The case of enough free memory. Remember all OK elements (myElements). SMESH_PredicatePtr myPredicate; + std::vector< int > myMeshInfo; std::vector< const SMDS_MeshElement*> myElements; - unsigned long myMeshModifTime; // when myElements was filled + bool myElementsOK; + size_t myMeshModifTime; // when myMeshInfo was updated int myPredicateTic; + size_t myNbElemToSkip; }; #endif