From 4d9421a970f00fabcc2c8a21fbca4694e6823953 Mon Sep 17 00:00:00 2001 From: Roman Lygin Date: Thu, 23 Jan 2014 13:37:50 +0400 Subject: [PATCH] 0024533: Use 0 to check null handle instead of UndefinedHandleAccess Handle classes now use 0 as invalid value for pointer instead of custom (and platform-dependent) value like 0xfefd0000. Compiler macros UndefinedHandleAddress and _OCC64 are eliminated. --- CMakeLists.txt | 4 --- src/LDOM/LDOM_XmlReader.cxx | 6 +--- src/OSD/OSD_signal.cxx | 11 ++----- src/Standard/Handle_Standard_Persistent.hxx | 36 ++++++++------------- src/Standard/Handle_Standard_Transient.cxx | 8 ++--- src/Standard/Handle_Standard_Transient.hxx | 25 ++++++-------- src/Standard/Standard_MMgrOpt.cxx | 18 ----------- src/Standard/Standard_Macro.hxx | 7 ---- 8 files changed, 30 insertions(+), 85 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 682caf8e20..1468ea73d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,10 +69,6 @@ else() SET(COMPILER ${CMAKE_GENERATOR}) endif() -if (${COMPILER_BITNESS} STREQUAL 64) - add_definitions(-D_OCC64) -endif() - add_definitions(-DCSFDB) if(WIN32) add_definitions(/DWNT -wd4996) diff --git a/src/LDOM/LDOM_XmlReader.cxx b/src/LDOM/LDOM_XmlReader.cxx index 8ba8ce2f35..7d074fb386 100644 --- a/src/LDOM/LDOM_XmlReader.cxx +++ b/src/LDOM/LDOM_XmlReader.cxx @@ -68,11 +68,7 @@ LDOM_XmlReader::LDOM_XmlReader (const int aFileDes, TCollection_AsciiString& anErrorString) : myEOF (Standard_False), myFileDes (aFileDes), -#ifdef WNT - myIStream (cin), // one quirk of MSVC6.0: can't initialise by 0 -#else - myIStream (* (istream *) UndefinedHandleAddress), -#endif + myIStream (cin), // just a placeholder, myIStream will never be used anyway myError (anErrorString), myDocument (aDocument), myElement (NULL), diff --git a/src/OSD/OSD_signal.cxx b/src/OSD/OSD_signal.cxx index e7d890511c..606ef16779 100644 --- a/src/OSD/OSD_signal.cxx +++ b/src/OSD/OSD_signal.cxx @@ -34,7 +34,6 @@ #include #include #include -#include #include #include @@ -391,10 +390,7 @@ static void SegvHandler(const int theSignal, sigaddset(&set, SIGSEGV); sigprocmask (SIG_UNBLOCK, &set, NULL) ; void *address = ip->si_addr ; - if ( (((long) address )& ~0xffff) == (long) UndefinedHandleAddress ) { - Standard_NullObject::NewInstance("Attempt to access to null object")->Jump(); - } - else { + { char Msg[100]; sprintf(Msg,"SIGSEGV 'segmentation violation' detected. Address %lx", (long ) address ) ; @@ -423,10 +419,7 @@ static void SegvHandler(const int theSignal, Space = ((struct sigcontext *)theContext)->sc_sl.sl_ss.ss_cr20 ; Offset = ((struct sigcontext *)theContext)->sc_sl.sl_ss.ss_cr21 ; // cout << "Wrong address = " << hex(Offset) << endl ; - if ((Offset & ~0xffff) == (long)UndefinedHandleAddress) { - Standard_NullObject::Jump("Attempt to access to null object") ; - } - else { + { sprintf(Msg,"SIGSEGV 'segmentation violation' detected. Address %lx",Offset) ; OSD_SIGSEGV::Jump(Msg); // scp->sc_pcoq_head = scp->sc_pcoq_tail ; Permettrait de continuer a diff --git a/src/Standard/Handle_Standard_Persistent.hxx b/src/Standard/Handle_Standard_Persistent.hxx index 4893f12a03..efdabe405a 100644 --- a/src/Standard/Handle_Standard_Persistent.hxx +++ b/src/Standard/Handle_Standard_Persistent.hxx @@ -39,14 +39,6 @@ #pragma warning (disable:4312) #endif -#ifndef PUndefinedAddress -#ifdef _OCC64 -#define PUndefinedAddress ((Standard_Persistent *)0xfefdfefdfefd0000) -#else -#define PUndefinedAddress ((Standard_Persistent *)0xfefd0000) -#endif -#endif - class Standard_Persistent; class Handle_Standard_Type; class Handle_Standard_Persistent; @@ -64,17 +56,17 @@ class Handle(Standard_Persistent) void BeginScope() const { - if (entity != PUndefinedAddress) entity->count++; + if (entity != 0) entity->count++; } void EndScope() { - if (entity != PUndefinedAddress) + if (entity != 0) { entity->count--; if (entity->count == 0) { entity->Delete(); - entity = PUndefinedAddress ; + entity = 0 ; } } } @@ -86,7 +78,7 @@ class Handle(Standard_Persistent) Handle(Standard_Persistent)() { - entity = PUndefinedAddress ; + entity = 0 ; } Handle(Standard_Persistent)(const Handle(Standard_Persistent)& aTid) @@ -98,7 +90,7 @@ class Handle(Standard_Persistent) Handle(Standard_Persistent)(const Standard_Persistent *anItem) { if (!anItem) - entity = PUndefinedAddress ; + entity = 0 ; else { entity = (Standard_Persistent *)anItem; BeginScope(); @@ -111,32 +103,32 @@ class Handle(Standard_Persistent) Standard_EXPORT void ShallowDump(Standard_OStream&) const; - int operator==(const Handle(Standard_Persistent)& right) const + bool operator==(const Handle(Standard_Persistent)& right) const { return entity == right.entity; } - int operator==(const Standard_Persistent *right) const + bool operator==(const Standard_Persistent *right) const { return entity == right; } - friend int operator==(const Standard_Persistent *left, const Handle(Standard_Persistent)& right) + friend bool operator==(const Standard_Persistent *left, const Handle(Standard_Persistent)& right) { return left == right.entity; } - int operator!=(const Handle(Standard_Persistent)& right) const + bool operator!=(const Handle(Standard_Persistent)& right) const { return entity != right.entity; } - int operator!=(const Standard_Persistent *right) const + bool operator!=(const Standard_Persistent *right) const { return entity != right; } - friend int operator!=(const Standard_Persistent *left, const Handle(Standard_Persistent)& right) + friend bool operator!=(const Standard_Persistent *left, const Handle(Standard_Persistent)& right) { return left != right.entity; } @@ -144,12 +136,12 @@ class Handle(Standard_Persistent) void Nullify() { EndScope(); - entity = PUndefinedAddress ; + entity = 0 ; } Standard_Boolean IsNull() const { - return entity == PUndefinedAddress ; + return entity == 0 ; } Standard_Persistent* Access() const @@ -168,7 +160,7 @@ class Handle(Standard_Persistent) { EndScope(); if (!anItem) - entity = PUndefinedAddress ; + entity = 0 ; else { entity = (Standard_Persistent *)anItem; BeginScope(); diff --git a/src/Standard/Handle_Standard_Transient.cxx b/src/Standard/Handle_Standard_Transient.cxx index 55fb1d40f1..071ba643d8 100644 --- a/src/Standard/Handle_Standard_Transient.cxx +++ b/src/Standard/Handle_Standard_Transient.cxx @@ -26,7 +26,7 @@ void Handle(Standard_Transient)::Dump(Standard_OStream& out) const void Handle(Standard_Transient)::Assign (const Standard_Transient *anItem) { - Standard_Transient *anIt = ( anItem ? (Standard_Transient*)anItem : UndefinedHandleAddress ); + Standard_Transient *anIt = (Standard_Transient*)anItem; if ( anIt == entity ) return; EndScope(); entity = anIt; @@ -37,7 +37,7 @@ void Handle(Standard_Transient)::Assign (const Standard_Transient *anItem) void Handle(Standard_Transient)::BeginScope() { - if (entity != UndefinedHandleAddress) + if (entity != 0) { Standard_Atomic_Increment (&entity->count); } @@ -47,9 +47,9 @@ void Handle(Standard_Transient)::BeginScope() void Handle(Standard_Transient)::EndScope() { - if (entity == UndefinedHandleAddress) + if (entity == 0) return; if (Standard_Atomic_Decrement (&entity->count) == 0) entity->Delete(); - entity = UndefinedHandleAddress; + entity = 0; } diff --git a/src/Standard/Handle_Standard_Transient.hxx b/src/Standard/Handle_Standard_Transient.hxx index 54b84f7909..6932aa775d 100644 --- a/src/Standard/Handle_Standard_Transient.hxx +++ b/src/Standard/Handle_Standard_Transient.hxx @@ -36,14 +36,6 @@ #pragma warning (disable:4312) #endif -#ifndef UndefinedHandleAddress -#ifdef _OCC64 -#define UndefinedHandleAddress ((Standard_Transient *)0xfefdfefdfefd0000) -#else -#define UndefinedHandleAddress ((Standard_Transient *)0xfefd0000) -#endif -#endif - class Handle_Standard_Transient; Standard_EXPORT Standard_Integer HashCode(const Handle(Standard_Transient)& ,const Standard_Integer); @@ -60,17 +52,18 @@ Standard_EXPORT Standard_Integer HashCode(const Handle(Standard_Transient)& ,con class Handle(Standard_Transient) { public: + // Public methods //! Empty constructor Handle(Standard_Transient) () - : entity(UndefinedHandleAddress) + : entity(0) { } //! Constructor from pointer to new object Handle(Standard_Transient) (const Standard_Transient *anItem) - : entity ( anItem ? (Standard_Transient*)anItem : UndefinedHandleAddress ) + : entity ( (Standard_Transient*)anItem ) { BeginScope(); } @@ -83,7 +76,7 @@ public: } //! Destructor - Standard_EXPORT ~Handle(Standard_Transient)() + ~Handle(Standard_Transient)() { EndScope(); } @@ -111,7 +104,7 @@ public: //! Check for being null Standard_Boolean IsNull() const { - return entity == UndefinedHandleAddress; + return entity == 0; } //! Returns pointer to referred object @@ -169,25 +162,25 @@ public: } //! Check for equality - friend int operator==(const Standard_Transient *left, const Handle(Standard_Transient)& right) + friend bool operator==(const Standard_Transient *left, const Handle(Standard_Transient)& right) { return left == right.entity; } //! Check for inequality - int operator!=(const Handle(Standard_Transient)& right) const + bool operator!=(const Handle(Standard_Transient)& right) const { return entity != right.entity; } //! Check for inequality - int operator!=(const Standard_Transient *right) const + bool operator!=(const Standard_Transient *right) const { return entity != right; } //! Check for inequality - friend int operator!=(const Standard_Transient *left, const Handle(Standard_Transient)& right) + friend bool operator!=(const Standard_Transient *left, const Handle(Standard_Transient)& right) { return left != right.entity; } diff --git a/src/Standard/Standard_MMgrOpt.cxx b/src/Standard/Standard_MMgrOpt.cxx index 8542e245c0..4a93c7b702 100644 --- a/src/Standard/Standard_MMgrOpt.cxx +++ b/src/Standard/Standard_MMgrOpt.cxx @@ -134,24 +134,6 @@ extern "C" int getpagesize() ; #define ROUNDDOWN_CELL(size) ROUNDDOWN8(size) #define INDEX_CELL(rsize) ((rsize) >> 3) -// Minimal granularity: 4 bytes (32-bit systems only) -#ifndef _OCC64 -//#define ROUNDUP_CELL(size) ROUNDUP4(size) -//#define INDEX_CELL(rsize) ((rsize) >> 2) -#endif - -// Adaptive granularity, less for little blocks and greater for bigger ones: -/* -#if _OCC64 -#define ROUNDUP_CELL(size) ((size) <= 0x40 ? ROUNDUP8(size) : ROUNDUP16(size)) -#define INDEX_CELL(rsize) ((rsize) <= 0x40 ? ((rsize) >> 3) : (4 + ((rsize) >> 4))) -#else -#define ROUNDUP_CELL(size) ((size) <= 0x40 ? ROUNDUP4(size) : ROUNDUP8(size)) -#define INDEX_CELL(rsize) ((rsize) <= 0x40 ? ((rsize) >> 2) : (8 + ((rsize) >> 3))) -#endif -*/ - - /* In the allocated block, first bytes are used for storing of memory manager's data. (size of block). The minimal size of these data is sizeof(int). The memory allocated in system usually alligned by 16 bytes.Tthe aligment of the diff --git a/src/Standard/Standard_Macro.hxx b/src/Standard/Standard_Macro.hxx index b86317fe7b..ef6ea86920 100644 --- a/src/Standard/Standard_Macro.hxx +++ b/src/Standard/Standard_Macro.hxx @@ -141,11 +141,4 @@ //# endif // WNT # endif // __Standard_API -// Define _OCC64 variable (unless already defined) if platform is known to be 64-bit -#ifndef _OCC64 -#if defined (__alpha) || defined(DECOSF1) || defined(_WIN64) || defined(__amd64) || defined(__x86_64) -#define _OCC64 1 -#endif -#endif - #endif