#include "SMESH_TryCatch.hxx" // include after OCCT headers!
#include <smIdType.hxx>
+#include <Basics_OCCTVersion.hxx>
#define cast2Node(elem) static_cast<const SMDS_MeshNode*>( elem )
vector< const SMDS_MeshElement* > facesNearLink;
vector< std::pair< int, int > > nodeIndsOfFace;
TIDSortedElemSet avoidSet, emptySet;
- NCollection_Map< SMESH_TLink, SMESH_TLink > checkedLinks;
+ NCollection_Map< SMESH_TLink, SMESH_TLinkHasher > checkedLinks;
while ( !theRefFaces.empty() )
{
// purpose : allow comparing elements basing on their nodes
// ========================================================
+struct ComparableElementHasher;
+
class ComparableElement : public boost::container::flat_set< smIdType >
{
typedef boost::container::flat_set< smIdType > int_set;
smIdType mySumID;
mutable int myGroupID;
+ friend ComparableElementHasher;
+
public:
ComparableElement( const SMDS_MeshElement* theElem ):
mySumID = src.mySumID;
myGroupID = src.myGroupID;
}
+};
+struct ComparableElementHasher
+{
+#if OCC_VERSION_LARGE < 0x07080000
static int HashCode(const ComparableElement& se, int limit )
{
return ::HashCode( FromSmIdType<int>(se.mySumID), limit );
{
return ( se1 == se2 );
}
+#else
+ size_t operator()(const ComparableElement& se) const
+ {
+ return static_cast<size_t>(FromSmIdType<int>(se.mySumID));
+ }
+ bool operator()(const ComparableElement& se1, const ComparableElement& se2) const
+ {
+ return ( se1 == se2 );
+ }
+#endif
};
//=======================================================================
if ( theElements.empty() ) elemIt = GetMeshDS()->elementsIterator();
else elemIt = SMESHUtils::elemSetIterator( theElements );
- typedef NCollection_Map< ComparableElement, ComparableElement > TMapOfElements;
- typedef std::list<smIdType> TGroupOfElems;
+ typedef NCollection_Map< ComparableElement, ComparableElementHasher > TMapOfElements;
+ typedef std::list<smIdType> TGroupOfElems;
TMapOfElements mapOfElements;
std::vector< TGroupOfElems > arrayOfGroups;
TGroupOfElems groupOfElems;