From: kgv Date: Mon, 14 May 2018 12:33:55 +0000 (+0300) Subject: 0029764: Foundation Classes, TColStd_MapIteratorOfPackedMapOfInteger - workaround... X-Git-Tag: V7_3_0~18 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=3d77e9620ead5c617884c989c62cfe1c0858313a;hp=32ca771129cf170c0f094182d77edda967bec5f6 0029764: Foundation Classes, TColStd_MapIteratorOfPackedMapOfInteger - workaround Visual Studio Linker bug with enabled CLI --- diff --git a/src/TColStd/TColStd_PackedMapOfInteger.cxx b/src/TColStd/TColStd_PackedMapOfInteger.cxx index 6a82f2d0f6..b4e0f91475 100644 --- a/src/TColStd/TColStd_PackedMapOfInteger.cxx +++ b/src/TColStd/TColStd_PackedMapOfInteger.cxx @@ -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 (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 (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; diff --git a/src/TColStd/TColStd_PackedMapOfInteger.hxx b/src/TColStd/TColStd_PackedMapOfInteger.hxx index 340666600b..0baa0f6aa3 100644 --- a/src/TColStd/TColStd_PackedMapOfInteger.hxx +++ b/src/TColStd/TColStd_PackedMapOfInteger.hxx @@ -46,7 +46,7 @@ public: : TCollection_BasicMapIterator (theMap), myIntMask (~0U) { - myKey = myNode != NULL ? TColStd_intMapNode_findNext (reinterpret_cast(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(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(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(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: