Salome HOME
std::regex does not work properly with gcc 4.8
[modules/smesh.git] / src / SMESHUtils / SMESH_TypeDefs.hxx
index 9fbc5b076ade419dc7c865af26091a5a74b79c3b..a682b894d091099d6b11f8cfed9017cee05dc43b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021  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
@@ -32,6 +32,8 @@
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_MeshNode.hxx"
 
+#include <smIdType.hxx>
+
 #include <gp_XYZ.hxx>
 #include <gp_XY.hxx>
 
@@ -76,6 +78,7 @@ namespace SMESHUtils
     TVECTOR v2( vec );
     vec.swap( v2 );
   }
+
   /*!
    * \brief Auto pointer
    */
@@ -91,6 +94,7 @@ namespace SMESHUtils
   private:
     Deleter( const Deleter& );
   };
+
   /*!
    * \brief Auto pointer to array
    */
@@ -100,10 +104,15 @@ namespace SMESHUtils
     TOBJ* _obj;
     ArrayDeleter( TOBJ* obj ): _obj( obj ) {}
     ~ArrayDeleter() { delete [] _obj; _obj = 0; }
+    operator TOBJ*() { return _obj; }
+    TOBJ* get() { return _obj; }
   private:
     ArrayDeleter( const ArrayDeleter& );
   };
 
+  /*!
+   * \return SMDS_ElemIteratorPtr on an std container of SMDS_MeshElement's
+   */
   template < class ELEM_SET >
   SMDS_ElemIteratorPtr elemSetIterator( const ELEM_SET& elements )
   {
@@ -111,6 +120,24 @@ namespace SMESHUtils
       < SMDS_pElement, typename ELEM_SET::const_iterator> TSetIterator;
     return boost::make_shared< TSetIterator >( elements.begin(), elements.end() );
   }
+
+  /*!
+   * \brief Increment enum value
+   */
+  template < typename ENUM >
+  void Increment( ENUM& v, int delta=1 )
+  {
+    v = ENUM( int(v)+delta );
+  }
+
+  /*!
+   * \brief Return incremented enum value
+   */
+  template < typename ENUM >
+  ENUM Add( ENUM v, int delta )
+  {
+    return ENUM( int(v)+delta );
+  }
 }
 
 //=======================================================================
@@ -131,7 +158,7 @@ struct SMESH_TLink: public NLink
   // 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 );
+    return smIdHasher::HashCode( link.node1()->GetID() + link.node2()->GetID(), aLimit );
   }
   static Standard_Boolean IsEqual(const SMESH_TLink& l1, const SMESH_TLink& l2)
   {
@@ -185,6 +212,21 @@ struct SMESH_TNodeXYZ : public gp_XYZ
 };
 typedef SMESH_TNodeXYZ SMESH_NodeXYZ;
 
+// --------------------------------------------------------------------------------
+// SMESH_Hasher provide methods needed to put mesh data to NCollection maps
+
+struct SMESH_Hasher
+{
+  static Standard_Integer HashCode(const SMDS_MeshElement* e, const Standard_Integer upper)
+  {
+    return smIdHasher::HashCode( e->GetID(), upper );
+  }
+  static Standard_Boolean IsEqual( const SMDS_MeshElement* e1, const SMDS_MeshElement* e2 )
+  {
+    return ( e1 == e2 );
+  }
+};
+
 //--------------------------------------------------
 /*!
  * \brief Data of a node generated on FACE boundary
@@ -198,7 +240,7 @@ typedef struct uvPtStruct
   double x, y; // 2d parameter, normalized [0,1]
   const SMDS_MeshNode * node;
 
-  uvPtStruct(): node(NULL) {}
+  uvPtStruct(const SMDS_MeshNode* n = 0): node(n) {}
 
   inline gp_XY UV() const { return gp_XY( u, v ); }
   inline void  SetUV( const gp_XY& uv ) { u = uv.X(); v = uv.Y(); }