0,0 → 1,58 |
#ifndef __yacasbase_h__ |
#define __yacasbase_h__ |
#include "yacasprivate.h" |
|
/* /class YacasBase. All other objects should derive from YacasBase so that they use the correct |
* operators new and delete. This ensures a Yacas-specific memory manager is used. |
*/ |
|
class YacasBase |
{ |
public: |
inline YacasBase() {}; |
#ifdef YACAS_DEBUG |
// New operators with additional debug arguments need to be handled differently |
static inline void* operator new(size_t size, char* aFile, int aLine) |
{ return YacasMallocPrivate(size,aFile,aLine); } |
static inline void* operator new[](size_t size, char* aFile, int aLine) |
{ return YacasMallocPrivate(size,aFile,aLine); } |
#else |
// Normal versions of operator new |
static inline void* operator new(size_t size) |
{ return PlatAlloc(size); } |
static inline void* operator new[](size_t size) |
{ return PlatAlloc(size); } |
#endif |
/* Operators delete are shared, they behave the same whether in debug or release (as |
PlatFree is mapped to the debug version of freeing memory any way) |
*/ |
static inline void operator delete(void* object) |
{ PlatFree(object); } |
static inline void operator delete[](void* object) |
{ PlatFree(object); } |
// Placement form of new and delete. |
static inline void* operator new(size_t, void* where) { return where; } |
static inline void operator delete(void*, void*) {} |
|
/** If we don't want to force vtables, we can make the destructor inline and protected. |
* The following might cause a little bit of overhead but has the advantage that even |
* the compiler can see that this is safe (thus no unnecessary warnings). Preferrably |
* though this class has a protected inline destructor. |
* |
* When I use Xcode on the MacOSX, I would prefer to not see the warnings that the |
* destructor of this class is not virtual, and speed is not the primary concern in |
* that build (as that build is used mostly for debugging). |
* |
* HIDE_UNIMPORTANT_COMPILER_WARNINGS can be defined in case one wants to get rid of |
* compiler warnings, as opposed to having maximum running speed. |
*/ |
protected: |
#ifdef HIDE_UNIMPORTANT_COMPILER_WARNINGS |
virtual |
#else // HIDE_UNIMPORTANT_COMPILER_WARNINGS |
inline |
#endif // HIDE_UNIMPORTANT_COMPILER_WARNINGS |
~YacasBase() {}; |
}; |
|
#endif |