From 92ca4d37a11e34780ac815e8de1d9aa1a07743f0 Mon Sep 17 00:00:00 2001 From: abd Date: Tue, 25 Apr 2006 12:52:57 +0000 Subject: [PATCH] Cange std::hash_map on NCollection data map --- src/SMESHDS/Makefile.in | 3 +- src/SMESHDS/SMESHDS_Mesh.cxx | 38 +++++++++++++++++---- src/SMESHDS/SMESHDS_Mesh.hxx | 66 +++++++----------------------------- 3 files changed, 46 insertions(+), 61 deletions(-) diff --git a/src/SMESHDS/Makefile.in b/src/SMESHDS/Makefile.in index ea7d101fb..8ed411f00 100644 --- a/src/SMESHDS/Makefile.in +++ b/src/SMESHDS/Makefile.in @@ -68,7 +68,8 @@ EXPORT_HEADERS= \ SMESHDS_GroupBase.hxx \ SMESHDS_Group.hxx \ SMESHDS_GroupOnGeom.hxx \ - SMESH_SMESHDS.hxx + SMESH_SMESHDS.hxx \ + SMESHDS_DataMapOfShape.hxx # additionnal information to compil and link file CPPFLAGS += $(OCC_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) diff --git a/src/SMESHDS/SMESHDS_Mesh.cxx b/src/SMESHDS/SMESHDS_Mesh.cxx index 5f92232dd..c22dd883e 100644 --- a/src/SMESHDS/SMESHDS_Mesh.cxx +++ b/src/SMESHDS/SMESHDS_Mesh.cxx @@ -41,6 +41,11 @@ using namespace std; +/*Standard_Boolean IsEqual( const TopoDS_Shape& S1, const TopoDS_Shape& S2 ) + { + return S1.IsSame( S2 ); + }*/ + //======================================================================= //function : Create //purpose : @@ -60,7 +65,7 @@ void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S) { // removal of a shape to mesh, delete ... // - hypotheses - myShapeToHypothesis.clear(); + myShapeToHypothesis.Clear(); // - shape indices in SMDS_Position of nodes map::iterator i_sub = myShapeIndexToSubMesh.begin(); for ( ; i_sub != myShapeIndexToSubMesh.end(); i_sub++ ) { @@ -97,7 +102,14 @@ void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S) bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS, const SMESHDS_Hypothesis * H) { - list& alist=myShapeToHypothesis[SS]; + //list& alist=myShapeToHypothesis[SS]; + + if ( !myShapeToHypothesis.IsBound( SS ) ) + myShapeToHypothesis.Bind( SS, list() ); + + list& alist = myShapeToHypothesis.ChangeFind( SS ); + + //Check if the Hypothesis is still present list::iterator ith=alist.begin(); @@ -117,7 +129,7 @@ bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS, bool SMESHDS_Mesh::RemoveHypothesis(const TopoDS_Shape & S, const SMESHDS_Hypothesis * H) { - ShapeToHypothesis::iterator its=myShapeToHypothesis.find(S); + /*ShapeToHypothesis::iterator its=myShapeToHypothesis.find(S); if(its!=myShapeToHypothesis.end()) { list::iterator ith=(*its).second.begin(); @@ -128,7 +140,19 @@ bool SMESHDS_Mesh::RemoveHypothesis(const TopoDS_Shape & S, (*its).second.erase(ith); return true; } - } + }*/ + if ( myShapeToHypothesis.IsBound( S ) ) + { + list& alist = myShapeToHypothesis.ChangeFind( S ); + list::iterator ith = alist.begin(); + + for (; ith != alist.end(); ith++) + if (H == *ith) + { + alist.erase(ith); + return true; + } + } return false; } @@ -878,8 +902,8 @@ list SMESHDS_Mesh::SubMeshIndices() const list& SMESHDS_Mesh::GetHypothesis( const TopoDS_Shape & S) const { - if (myShapeToHypothesis.find(S)!=myShapeToHypothesis.end()) - return myShapeToHypothesis.find(S)->second; + if ( myShapeToHypothesis.IsBound(S) ) + return myShapeToHypothesis.Find(S); static list empty; return empty; @@ -920,7 +944,7 @@ bool SMESHDS_Mesh::HasMeshElements(const TopoDS_Shape & S) //======================================================================= bool SMESHDS_Mesh::HasHypothesis(const TopoDS_Shape & S) { - return myShapeToHypothesis.find(S)!=myShapeToHypothesis.end(); + return myShapeToHypothesis.IsBound(S); } //======================================================================= diff --git a/src/SMESHDS/SMESHDS_Mesh.hxx b/src/SMESHDS/SMESHDS_Mesh.hxx index dc3f47975..b6371a482 100644 --- a/src/SMESHDS/SMESHDS_Mesh.hxx +++ b/src/SMESHDS/SMESHDS_Mesh.hxx @@ -45,30 +45,14 @@ #include #include #include -#include -#ifdef WNT -#include -#endif -//Not portable see http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#5_4 to know more. -#ifdef __GNUC__ - #if __GNUC__ < 3 - #include - namespace gstd { using ::hash_map; }; // inherit globals - #elif __GNUC__ == 3 - #include - #if __GNUC_MINOR__ == 0 - namespace gstd = std; // GCC 3.0 - #else - namespace gstd = ::__gnu_cxx; // GCC 3.1 and later - #endif - #else // GCC 4.0 and later - #include - namespace gstd = ::__gnu_cxx; - #endif -#else // ... there are other compilers, right? - namespace gstd = std; -#endif +#include +#include +/* + * Using of native haah_map isn't portable and don't work on WIN32 platform. + * So this functionality implement on new NCollection_DataMap technology + */ +#include "SMESHDS_DataMapOfShape.hxx" class SMESHDS_GroupBase; @@ -245,31 +229,6 @@ public: ~SMESHDS_Mesh(); private: -#ifndef WNT - struct HashTopoDS_Shape{ - size_t operator()(const TopoDS_Shape& S) const { - return S.HashCode(2147483647); - } - }; -#else - typedef gstd::hash_compare< TopoDS_Shape, less > HashTopoDS; - - class HashTopoDS_Shape : public HashTopoDS { - public: - - size_t operator()(const TopoDS_Shape& S) const { - return S.HashCode(2147483647); - } - - bool operator()(const TopoDS_Shape& S1,const TopoDS_Shape& S2) const { - return S1==S2; - } - }; - - - -#endif - void addNodeToSubmesh( const SMDS_MeshNode* aNode, int Index ) { //Update or build submesh @@ -279,13 +238,14 @@ private: it->second->AddNode( aNode ); // add aNode to submesh } + /*int HashCode( const TopoDS_Shape& S, const Standard_Integer theUpper ) const + { + return S.HashCode(2147483647); + }*/ + typedef std::list THypList; -#ifndef WNT - typedef gstd::hash_map ShapeToHypothesis; -#else - typedef gstd::hash_map ShapeToHypothesis; -#endif + typedef NCollection_DataMap< TopoDS_Shape, THypList > ShapeToHypothesis; ShapeToHypothesis myShapeToHypothesis; -- 2.39.2