Salome HOME
[bos #40653][CEA] New mesh import export formats with meshio.
[modules/smesh.git] / src / SMESHUtils / SMESH_TypeDefs.hxx
index f6fcdb505ef2105b2e757d4bd19c296b634715e6..9ae5a4ce25bbbc30fccf3dd29138f5a7c00b06f3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -27,6 +27,8 @@
 #ifndef __SMESH_TypeDefs_HXX__
 #define __SMESH_TypeDefs_HXX__
 
 #ifndef __SMESH_TypeDefs_HXX__
 #define __SMESH_TypeDefs_HXX__
 
+#include <Basics_OCCTVersion.hxx>
+
 #include "SMESH_Utils.hxx"
 
 #include "SMDS_SetIterator.hxx"
 #include "SMESH_Utils.hxx"
 
 #include "SMDS_SetIterator.hxx"
@@ -36,6 +38,7 @@
 
 #include <gp_XYZ.hxx>
 #include <gp_XY.hxx>
 
 #include <gp_XYZ.hxx>
 #include <gp_XY.hxx>
+#include <NCollection_Sequence.hxx>
 
 #include <map>
 #include <list>
 
 #include <map>
 #include <list>
@@ -104,6 +107,8 @@ namespace SMESHUtils
     TOBJ* _obj;
     ArrayDeleter( TOBJ* obj ): _obj( obj ) {}
     ~ArrayDeleter() { delete [] _obj; _obj = 0; }
     TOBJ* _obj;
     ArrayDeleter( TOBJ* obj ): _obj( obj ) {}
     ~ArrayDeleter() { delete [] _obj; _obj = 0; }
+    operator TOBJ*() { return _obj; }
+    TOBJ* get() { return _obj; }
   private:
     ArrayDeleter( const ArrayDeleter& );
   };
   private:
     ArrayDeleter( const ArrayDeleter& );
   };
@@ -154,6 +159,19 @@ struct SMESH_TLink: public NLink
   const SMDS_MeshNode* node2() const { return second; }
 
   // methods for usage of SMESH_TLink as a hasher in NCollection maps
   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 smIdHasher::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() );
+  //}
+};
+// a hasher in NCollection maps
+struct SMESH_TLinkHasher
+{
+#if OCC_VERSION_LARGE < 0x07080000
   static int HashCode(const SMESH_TLink& link, int aLimit)
   {
     return smIdHasher::HashCode( link.node1()->GetID() + link.node2()->GetID(), aLimit );
   static int HashCode(const SMESH_TLink& link, int aLimit)
   {
     return smIdHasher::HashCode( link.node1()->GetID() + link.node2()->GetID(), aLimit );
@@ -162,6 +180,16 @@ struct SMESH_TLink: public NLink
   {
     return ( l1.node1() == l2.node1() && l1.node2() == l2.node2() );
   }
   {
     return ( l1.node1() == l2.node1() && l1.node2() == l2.node2() );
   }
+#else
+  size_t operator()(const SMESH_TLink& link) const
+  {
+    return smIdHasher()( link.node1()->GetID() + link.node2()->GetID() );
+  }
+  bool operator()(const SMESH_TLink& l1, const SMESH_TLink& l2) const
+  {
+    return ( l1.node1() == l2.node1() && l1.node2() == l2.node2() );
+  }
+#endif
 };
 typedef SMESH_TLink SMESH_Link;
 
 };
 typedef SMESH_TLink SMESH_Link;
 
@@ -200,6 +228,7 @@ struct SMESH_TNodeXYZ : public gp_XYZ
     }
     return false;
   }
     }
     return false;
   }
+  void SetXYZ( const gp_XYZ& p ) { SetCoord( p.X(), p.Y(), p.Z() ); }
   const SMDS_MeshNode* Node() const { return _node; }
   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(); }
   const SMDS_MeshNode* Node() const { return _node; }
   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(); }
@@ -215,6 +244,7 @@ typedef SMESH_TNodeXYZ SMESH_NodeXYZ;
 
 struct SMESH_Hasher
 {
 
 struct SMESH_Hasher
 {
+#if OCC_VERSION_LARGE < 0x07080000
   static Standard_Integer HashCode(const SMDS_MeshElement* e, const Standard_Integer upper)
   {
     return smIdHasher::HashCode( e->GetID(), upper );
   static Standard_Integer HashCode(const SMDS_MeshElement* e, const Standard_Integer upper)
   {
     return smIdHasher::HashCode( e->GetID(), upper );
@@ -223,6 +253,17 @@ struct SMESH_Hasher
   {
     return ( e1 == e2 );
   }
   {
     return ( e1 == e2 );
   }
+#else
+  size_t operator()(const SMDS_MeshElement* e) const
+  {
+    return smIdHasher()( e->GetID() );
+  }
+
+  bool operator()(const SMDS_MeshElement* e1, const SMDS_MeshElement* e2) const
+  {
+    return ( e1 == e2 );
+  }
+#endif
 };
 
 //--------------------------------------------------
 };
 
 //--------------------------------------------------
@@ -259,10 +300,8 @@ typedef std::vector< const SMDS_MeshElement* > SMESH_SequenceOfElemPtr;
 
 // --------------------------------------------------------------------------------
 // class SMESH_SequenceOfNode
 
 // --------------------------------------------------------------------------------
 // class SMESH_SequenceOfNode
-#include <NCollection_DefineSequence.hxx>
-typedef const SMDS_MeshNode* SMDS_MeshNodePtr;
 
 
-DEFINE_SEQUENCE(SMESH_SequenceOfNode,
-                SMESH_BaseCollectionNodePtr, SMDS_MeshNodePtr)
+typedef const SMDS_MeshNode*                     SMDS_MeshNodePtr;
+typedef NCollection_Sequence< SMDS_MeshNodePtr > SMESH_SequenceOfNode;
 
 #endif
 
 #endif