// memmgr.h
//
// This file contains declarations and macros for memory management.  
// Implementation details may change so beware of relying on internal details.


#ifndef __INCLUDE_MEMMGR
#define __INCLUDE_MEMMGR

#ifdef __cplusplus
extern "C" 
{
#endif

void *ExternAlloc(DWORD cb);
void *ExternRealloc(void *pv, DWORD cb);
void  ExternFree(void *pv);

char *Externstrdup( const char *strSource );
wchar_t *Externwcsdup(const wchar_t *wszSource);

#ifdef DBG

typedef struct MEMORY_MANAGER {
    int iCookie;       // Tag to verify pointer to memory manager
    int cAllocMem;     // Amount of memory alloced
    int cAlloc;        // Count of allocs outstanding
    int cAllocMaxMem;  // Max amount of memory ever alloced.
} MEMORY_MANAGER;

extern MEMORY_MANAGER g_theMemoryManager;

#endif

#ifdef __cplusplus
};
#endif

#endif //__INCLUDE_MEMMGR