// MemEx.h -- Memory allocation with exceptions...
// Created 2/12/93 by Ron Murray

#ifndef __MEMEX_H__

#define __MEMEX_H__

#ifdef _DEBUG

#define ExAlloc(fZeroMem, cb)   AllocateMemory(cb, fZeroMem, TRUE, __FILE__, __LINE__)
#define  VAlloc(fZeroMem, cb)   AllocateMemory(cb, fZeroMem, TRUE, __FILE__, __LINE__)
#define   VFree(pv)              ReleaseMemory(pv)

void CreateVARecord(PVOID pvBase, PVOID pvCommitLimit, PVOID pvReserveLimit,
                    PSZ pszWhichFile, UINT iWhichLine
                   );

void AdjustVARecord(PVOID pvBase, PVOID pvCommitLimit);

void DestroyVARecord(PVOID pvBase);

void DumpResidualVARecords();

void DumpResidualAllocations();

void ValidateHeap();

PVOID AllocateMemory(UINT cb, BOOL fZeroMemory= TRUE, BOOL fExceptions= TRUE \
                            , PSZ pszWhichFile= __FILE__, UINT iWhichLine= __LINE__);

void * __cdecl operator new(size_t nSize, PSZ pszWhichFile= __FILE__, UINT iWhichLine= __LINE__);

#define New     new(__FILE__, __LINE__)

#else // _DEBUG

#define ExAlloc(fZeroMem, cb)   AllocateMemory(cb, fZeroMem, TRUE)
#define  VAlloc(fZeroMem, cb)   AllocateMemory(cb, fZeroMem, TRUE)
#define   VFree(pv)              ReleaseMemory(pv)
#define ValidateHeap()

PVOID AllocateMemory(UINT cb, BOOL fZeroMemory= TRUE, BOOL fExceptions= TRUE);

#define New     new

#endif // _DEBUG

 void * __cdecl operator new   (size_t nSize);
 void   __cdecl operator delete(void *pbData);

 void  ReleaseMemory(PVOID pv);

 void LiberateHeap();

 void EnableMemoryRequests();
 void EnableDiskRequests  ();
 BOOL AskForMemory        ();
 BOOL AskForDiskSpace     (const BYTE *pszPath);

#endif // __MEMEX_H__