/*++

© 1998 Seagate Software, Inc.  All rights reserved.

Module Name:

    wsbtrak.h

Abstract:

    Utility functions to keep track of run-time information.

Author:

    Ron White   [ronw]   5-Dec-1997

Revision History:

--*/

#ifndef _WSBTRAK_
#define _WSBTRAK_

//  Flags for WsbObjectTracePointers
#define WSB_OTP_STATISTICS          0x00000001
#define WSB_OTP_SEQUENCE            0x00000002
#define WSB_OTP_ALLOCATED           0x00000004
#define WSB_OTP_ALL                 0x0000000f

//  Define these as macros so we can get rid of them for release code
#if defined(WSB_TRACK_MEMORY)
#define WSB_OBJECT_ADD(guid, addr)   WsbObjectAdd(guid, addr)
#define WSB_OBJECT_SUB(guid, addr)   WsbObjectSub(guid, addr)
#define WSB_OBJECT_TRACE_POINTERS(flags)    WsbObjectTracePointers(flags)
#define WSB_OBJECT_TRACE_TYPES       WsbObjectTraceTypes()

#else
#define WSB_OBJECT_ADD(guid, addr)   
#define WSB_OBJECT_SUB(guid, addr)   
#define WSB_OBJECT_TRACE_POINTERS(flags)
#define WSB_OBJECT_TRACE_TYPES       

#endif

// Tracker functions
#if defined(WSB_TRACK_MEMORY)
extern WSB_EXPORT HRESULT WsbObjectAdd(const GUID& guid, const void* addr);
extern WSB_EXPORT HRESULT WsbObjectSub(const GUID& guid, const void* addr);
extern WSB_EXPORT HRESULT WsbObjectTracePointers(ULONG flags);
extern WSB_EXPORT HRESULT WsbObjectTraceTypes(void);
#endif

// Memory replacement functions
#if defined(WSB_TRACK_MEMORY)
extern WSB_EXPORT LPVOID WsbMemAlloc(ULONG cb, const char * filename, int linenum);
extern WSB_EXPORT void   WsbMemFree(LPVOID pv, const char * filename, int linenum);
extern WSB_EXPORT LPVOID WsbMemRealloc(LPVOID pv, ULONG cb, 
        const char * filename, int linenum);

extern WSB_EXPORT BSTR    WsbSysAllocString(const OLECHAR FAR * sz, 
        const char * filename, int linenum);
extern WSB_EXPORT BSTR    WsbSysAllocStringLen(const OLECHAR FAR * sz, 
        unsigned int cc, const char * filename, int linenum);
extern WSB_EXPORT void    WsbSysFreeString(BSTR bs, const char * filename, int linenum);
extern WSB_EXPORT HRESULT WsbSysReallocString(BSTR FAR * pb, const OLECHAR FAR * sz, 
        const char * filename, int linenum);
extern WSB_EXPORT HRESULT WsbSysReallocStringLen(BSTR FAR * pb, 
        const OLECHAR FAR * sz, unsigned int cc, const char * filename, int linenum);

#endif

#endif // _WSBTRAK_