X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHUtils%2FSMESH_TypeDefs.hxx;h=d73f8ca561e00ff7a11eddd54656cace0e024af5;hb=a17b36970bc61da1d664453c615754997c925b18;hp=18ca428c1bbc9bbccae70711d2b2b2222052b509;hpb=b0a908c0d20341651771d0249fb10882f54b2aad;p=modules%2Fsmesh.git diff --git a/src/SMESHUtils/SMESH_TypeDefs.hxx b/src/SMESHUtils/SMESH_TypeDefs.hxx index 18ca428c1..d73f8ca56 100644 --- a/src/SMESHUtils/SMESH_TypeDefs.hxx +++ b/src/SMESHUtils/SMESH_TypeDefs.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -43,7 +43,8 @@ typedef std::map, TIDCompare > TElemOfElemListMap; typedef std::map, TIDCompare > TElemOfNodeListMap; -typedef std::map TNodeNodeMap; +typedef std::map TNodeNodeMap; //!< Set of elements sorted by ID, to be used to assure predictability of edition typedef std::set< const SMDS_MeshElement*, TIDCompare > TIDSortedElemSet; @@ -72,6 +73,33 @@ namespace SMESHUtils TVECTOR v2( vec ); vec.swap( v2 ); } + /*! + * \brief Auto pointer + */ + template + struct Deleter + { + TOBJ* _obj; + explicit Deleter( TOBJ* obj = (TOBJ*)NULL ): _obj( obj ) {} + ~Deleter() { delete _obj; _obj = 0; } + TOBJ& operator*() const { return *_obj; } + TOBJ* operator->() const { return _obj; } + operator bool() const { return _obj; } + private: + Deleter( const Deleter& ); + }; + /*! + * \brief Auto pointer to array + */ + template + struct ArrayDeleter + { + TOBJ* _obj; + ArrayDeleter( TOBJ* obj ): _obj( obj ) {} + ~ArrayDeleter() { delete [] _obj; _obj = 0; } + private: + ArrayDeleter( const ArrayDeleter& ); + }; } //======================================================================= @@ -88,6 +116,16 @@ struct SMESH_TLink: public NLink { if ( first->GetID() < second->GetID() ) std::swap( first, second ); } const SMDS_MeshNode* node1() const { return first; } const SMDS_MeshNode* node2() const { return second; } + + // methods for usage of SMESH_TLink as a hasher in NCollection maps + static int HashCode(const SMESH_TLink& link, int aLimit) + { + return ::HashCode( link.node1()->GetID() + link.node2()->GetID(), aLimit ); + } + static Standard_Boolean IsEqual(const SMESH_TLink& l1, const SMESH_TLink& l2) + { + return ( l1.node1() == l2.node1() && l1.node2() == l2.node2() ); + } }; //======================================================================= @@ -112,13 +150,20 @@ struct SMESH_TNodeXYZ : public gp_XYZ { const SMDS_MeshNode* _node; double _xyz[3]; - SMESH_TNodeXYZ( const SMDS_MeshElement* e=0):gp_XYZ(0,0,0),_node(0) { + SMESH_TNodeXYZ( const SMDS_MeshElement* e=0):gp_XYZ(0,0,0),_node(0) + { + Set(e); + } + bool Set( const SMDS_MeshElement* e=0 ) + { if (e) { assert( e->GetType() == SMDSAbs_Node ); _node = static_cast(e); _node->GetXYZ(_xyz); // - thread safe getting coords SetCoord( _xyz[0], _xyz[1], _xyz[2] ); + return true; } + return false; } double Distance(const SMDS_MeshNode* n) const { return (SMESH_TNodeXYZ( n )-*this).Modulus(); } double SquareDistance(const SMDS_MeshNode* n) const { return (SMESH_TNodeXYZ( n )-*this).SquareModulus(); } @@ -159,7 +204,6 @@ class SMDS_MeshElement; typedef const SMDS_MeshElement* SMDS_MeshElementPtr; -DEFINE_BASECOLLECTION (SMESH_BaseCollectionElemPtr, SMDS_MeshElementPtr) DEFINE_SEQUENCE (SMESH_SequenceOfElemPtr, SMESH_BaseCollectionElemPtr, SMDS_MeshElementPtr) @@ -167,50 +211,7 @@ DEFINE_SEQUENCE (SMESH_SequenceOfElemPtr, SMESH_BaseCollectionElemPtr, SMDS_Mesh // class SMESH_SequenceOfNode typedef const SMDS_MeshNode* SMDS_MeshNodePtr; -DEFINE_BASECOLLECTION (SMESH_BaseCollectionNodePtr, SMDS_MeshNodePtr) DEFINE_SEQUENCE(SMESH_SequenceOfNode, SMESH_BaseCollectionNodePtr, SMDS_MeshNodePtr) -// -------------------------------------------------------------------------------- -// #include "SMESHDS_DataMapOfShape.hxx" - -// #include - -// #include - -/// Class SMESH_IndexedMapOfShape - -// DEFINE_BASECOLLECTION (SMESH_BaseCollectionShape, TopoDS_Shape) -// DEFINE_INDEXEDMAP (SMESH_IndexedMapOfShape, SMESH_BaseCollectionShape, TopoDS_Shape) - -/// Class SMESH_IndexedDataMapOfShapeIndexedMapOfShape - -// DEFINE_BASECOLLECTION (SMESH_BaseCollectionIndexedMapOfShape, SMESH_IndexedMapOfShape) -// DEFINE_INDEXEDDATAMAP (SMESH_IndexedDataMapOfShapeIndexedMapOfShape, -// SMESH_BaseCollectionIndexedMapOfShape, TopoDS_Shape, -// SMESH_IndexedMapOfShape) - -// -------------------------------------------------------------------------------- -// class SMESH_DataMapOfElemPtrSequenceOfElemPtr - -// SMESHUtils_EXPORT -// inline Standard_Integer HashCode(SMDS_MeshElementPtr theElem, -// const Standard_Integer theUpper) -// { -// void* anElem = (void*) theElem; -// return HashCode(anElem,theUpper); -// } - -// SMESHUtils_EXPORT -// inline Standard_Boolean IsEqual(SMDS_MeshElementPtr theOne, -// SMDS_MeshElementPtr theTwo) -// { -// return theOne == theTwo; -// } - -// DEFINE_BASECOLLECTION (SMESH_BaseCollectionSequenceOfElemPtr, SMESH_SequenceOfElemPtr) -// DEFINE_DATAMAP (SMESH_DataMapOfElemPtrSequenceOfElemPtr, -// SMESH_BaseCollectionSequenceOfElemPtr, -// SMDS_MeshElementPtr, SMESH_SequenceOfElemPtr) - #endif