kolibrios-fun/contrib/media/updf/include/stubs.h
Serhii Sakhno cd35d38ad2 updf: restore menuetlibc version
git-svn-id: svn://kolibrios.org@8429 a494cfbc-eb01-0410-851d-a64ba20cac60
2020-12-16 18:41:33 +00:00

71 lines
2.3 KiB
C++

/** \file stubs.h interface to platform-dependent functions
*/
#ifndef __stubs_h__
#define __stubs_h__
#include "lisptype.h"
/** Simple function that determines if two strings are equal,
should be defined in stubs.inl */
//inline LispInt StrEqual(const LispChar * ptr1, const LispChar * ptr2);
#ifdef NO_GLOBALS
#define PlatAlloc malloc
#define PlatReAlloc realloc
#define PlatFree free
#define NEW new
#define CHECKPTR(ptr)
#else // NO_GLOBALS -- goes almost to EOF
void *PlatObAlloc(size_t nbytes);
void PlatObFree(void *p);
void *PlatObReAlloc(void *p, size_t nbytes);
#ifdef YACAS_DEBUG
#include "debugmem.h"
#define PlatAlloc(nr) YacasMallocPrivate((size_t)nr,__FILE__,__LINE__)
#define PlatReAlloc(orig,nr) YacasReAllocPrivate(orig,(size_t)nr,__FILE__,__LINE__)
#define PlatFree(orig) YacasFreePrivate(orig)
#define NEW new (__FILE__,__LINE__)
#define CHECKPTR(ptr) CheckPtr(ptr,__FILE__,__LINE__)
#else // YACAS_DEBUG
#define PlatAlloc(nr) PlatObAlloc((size_t)nr)
#define PlatReAlloc(orig,nr) PlatObReAlloc(orig,(size_t)nr)
#define PlatFree(orig) PlatObFree(orig)
#define NEW new
#define CHECKPTR(ptr)
#endif // YACAS_DEBUG
template <class T>
inline T * PlatAllocN(LispInt aSize) { return (T*)PlatAlloc(aSize*sizeof(T)); }
#ifdef YACAS_DEBUG // goes almost to EOF
/* Operators new and delete are only defined globally here in debug mode. This is because
* the global new and delete operators should not be used. So the debug version makes sure
* the executable crashes if one of these are called.
*/
#define NEW_THROWER throw ()//(std::bad_alloc)
#define DELETE_THROWER throw ()
// TODO: why doesn't MSC itself have this problem? Perhaps wrong signature of these new and delete operators?
#if defined(_MSC_VER) && _MSC_VER <= 1310 // getting C4290 warnings? slowly increase number.
#pragma warning( disable : 4290 ) // C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
#endif
void* operator new(size_t size) NEW_THROWER;
void* operator new[](size_t size) NEW_THROWER;
void operator delete(void* object) DELETE_THROWER;
void operator delete[](void* object) DELETE_THROWER;
#endif // YACAS_DEBUG
#endif // NO_GLOBALS
#include "stubs.inl"
#endif // __stubs_h__