kolibrios-gitea/contrib/media/updf/include/yacasbase.h

59 lines
2.2 KiB
C
Raw Normal View History

#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