0029764: Foundation Classes, TColStd_MapIteratorOfPackedMapOfInteger - workaround...
authorkgv <kgv@opencascade.com>
Mon, 14 May 2018 12:33:55 +0000 (15:33 +0300)
committerabv <abv@opencascade.com>
Thu, 24 May 2018 12:36:23 +0000 (15:36 +0300)
src/TColStd/TColStd_PackedMapOfInteger.cxx
src/TColStd/TColStd_PackedMapOfInteger.hxx

index 6a82f2d..b4e0f91 100644 (file)
@@ -159,10 +159,11 @@ inline size_t TColStd_Population (unsigned int&      theMask,
 //function : TColStd_intMapNode_findNext
 //purpose  :
 //=======================================================================
-Standard_Integer TColStd_PackedMapOfInteger::TColStd_intMapNode_findNext (const TColStd_intMapNode* theNode,
-                                                                          unsigned int&             theMask)
+Standard_Integer TColStd_PackedMapOfInteger::TColStd_intMapNode_findNext (const Standard_Address theNode,
+                                                                          unsigned int&          theMask)
 {
-  unsigned int val = theNode->Data() & theMask;
+  const TColStd_intMapNode* aNode = reinterpret_cast<const TColStd_intMapNode*> (theNode);
+  unsigned int val = aNode->Data() & theMask;
   int nZeros (0);
   if (val == 0)
     theMask = ~0U;   // void, nothing to do
@@ -194,17 +195,18 @@ Standard_Integer TColStd_PackedMapOfInteger::TColStd_intMapNode_findNext (const
     }
     theMask = (aMask << 1);
   }
-  return nZeros + theNode->Key();
+  return nZeros + aNode->Key();
 }
 
 //=======================================================================
 //function : TColStd_intMapNode_findPrev
 //purpose  :
 //=======================================================================
-Standard_Integer TColStd_PackedMapOfInteger::TColStd_intMapNode_findPrev (const TColStd_intMapNode* theNode,
-                                                                          unsigned int&             theMask)
+Standard_Integer TColStd_PackedMapOfInteger::TColStd_intMapNode_findPrev (const Standard_Address theNode,
+                                                                          unsigned int&          theMask)
 {
-  unsigned int val = theNode->Data() & theMask;
+  const TColStd_intMapNode* aNode = reinterpret_cast<const TColStd_intMapNode*> (theNode);
+  unsigned int val = aNode->Data() & theMask;
   int nZeros (0);
   if (val == 0)
     theMask = ~0U;   // void, nothing to do
@@ -236,7 +238,7 @@ Standard_Integer TColStd_PackedMapOfInteger::TColStd_intMapNode_findPrev (const
     }
     theMask = (aMask >> 1);
   }
-  return (31 - nZeros) + theNode->Key();
+  return (31 - nZeros) + aNode->Key();
 }
 
 //=======================================================================
@@ -455,7 +457,7 @@ Standard_Integer TColStd_PackedMapOfInteger::GetMinimalMapped () const
     }
     if (pFoundNode) {
       unsigned int aFullMask (0xffffffff);
-      aResult = TColStd_intMapNode_findNext (pFoundNode, aFullMask);
+      aResult = TColStd_intMapNode_findNext ((const Standard_Address )pFoundNode, aFullMask);
     }
   }
   return aResult;
@@ -484,7 +486,7 @@ Standard_Integer TColStd_PackedMapOfInteger::GetMaximalMapped () const
     }
     if (pFoundNode) {
       unsigned int aFullMask (0xffffffff);
-      aResult = TColStd_intMapNode_findPrev (pFoundNode, aFullMask);
+      aResult = TColStd_intMapNode_findPrev ((const Standard_Address )pFoundNode, aFullMask);
     }
   }
   return aResult;
index 3406666..0baa0f6 100644 (file)
@@ -46,7 +46,7 @@ public:
     : TCollection_BasicMapIterator (theMap),
       myIntMask (~0U)
     {
-      myKey = myNode != NULL ? TColStd_intMapNode_findNext (reinterpret_cast<const TColStd_intMapNode*>(myNode), myIntMask) : 0;
+      myKey = myNode != NULL ? TColStd_intMapNode_findNext (myNode, myIntMask) : 0;
     }
 
     //! Re-initialize with the same or another Map instance.
@@ -54,7 +54,7 @@ public:
     {
       TCollection_BasicMapIterator::Initialize (theMap);
       myIntMask = ~0U;
-      myKey = myNode != NULL ? TColStd_intMapNode_findNext (reinterpret_cast<const TColStd_intMapNode*>(myNode), myIntMask) : 0;
+      myKey = myNode != NULL ? TColStd_intMapNode_findNext (myNode, myIntMask) : 0;
     }
 
     //! Restart the iteration
@@ -62,7 +62,7 @@ public:
     {
       TCollection_BasicMapIterator::Reset();
       myIntMask = ~0U;
-      myKey = myNode != NULL ? TColStd_intMapNode_findNext (reinterpret_cast<const TColStd_intMapNode*>(myNode), myIntMask) : 0;
+      myKey = myNode != NULL ? TColStd_intMapNode_findNext (myNode, myIntMask) : 0;
     }
 
     //! Query the iterated key.
@@ -77,8 +77,7 @@ public:
     {
       for (; myNode != NULL; TCollection_BasicMapIterator::Next())
       {
-        const TColStd_intMapNode* aNode = reinterpret_cast<const TColStd_intMapNode*>(myNode);
-        myKey = TColStd_intMapNode_findNext (aNode, myIntMask);
+        myKey = TColStd_intMapNode_findNext (myNode, myIntMask);
         if (myIntMask != ~0u)
         {
           break;
@@ -287,12 +286,12 @@ private:
 
   //! Find the smallest non-zero bit under the given mask.
   //! Outputs the new mask that does not contain the detected bit.
-  Standard_EXPORT static Standard_Integer TColStd_intMapNode_findNext (const TColStd_intMapNode* theNode,
+  Standard_EXPORT static Standard_Integer TColStd_intMapNode_findNext (const Standard_Address theNode,
                                                                        unsigned int& theMask);
 
   //! Find the highest non-zero bit under the given mask.
   //! Outputs the new mask that does not contain the detected bit.
-  Standard_EXPORT static Standard_Integer TColStd_intMapNode_findPrev (const TColStd_intMapNode* theNode,
+  Standard_EXPORT static Standard_Integer TColStd_intMapNode_findPrev (const Standard_Address theNode,
                                                                        unsigned int& theMask);
 
 private: