home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ctdemo.zip / classes / @CLSLIB1.ZIP / header / bsa.h next >
C/C++ Source or Header  |  1995-04-06  |  3KB  |  72 lines

  1. #ifndef BSA_INCLUDED
  2. #define BSA_INCLUDED
  3.  
  4. /*
  5.  *        This is the standard BSA preamble header
  6.  */
  7.  
  8.  
  9. //------------------------------ standard global declarations
  10. typedef unsigned int    size_t;
  11. typedef unsigned long    ulong;
  12.  
  13. extern void*    operator new (size_t);
  14. extern void        operator delete (void*);
  15.  
  16.  
  17. //------------------------------ CT HeapManager Section
  18. #ifdef __HEAPTRACE__
  19.  
  20. //--- function prototypes required by macros
  21. extern void*    operator new (size_t,int);
  22. extern void*    wrapNew (void*);
  23. extern int        beginNew (char*,int,char*,size_t,unsigned,unsigned);
  24. extern int        beginDelete (char*,int,void*,int);
  25. extern void        endDelete (char*,int,void*,int);
  26. extern char*    strndupDbg (char*,int,char*,unsigned long);
  27.  
  28. //--- macros for Heap operations
  29. #define NEW(type,par)             (type*)( wrapNew( beginNew(__FILE__, __LINE__, #type, sizeof(type), 0, 0 ) ? \
  30.                                         new(1) type par : 0) )
  31. #define NEW_VEC(type,dim)         (type*)( wrapNew( beginNew(__FILE__, __LINE__, #type, sizeof(type), dim, 0) ? \
  32.                                         new(1) type [dim] : 0 ) )
  33. #define NEW_VEC2(type,dim1,dim2) (type*)( wrapNew( beginNew(__FILE__, __LINE__, #type, sizeof(type), dim1, dim2) ? \
  34.                                         new(1) type [dim1][dim2] : 0 ) )
  35.  
  36. #define NEW_STR(pchar)            strndupDbg(__FILE__, __LINE__, pchar, 0)
  37. #define NEW_STRN(pchar,len)        strndupDbg(__FILE__,__LINE__, pchar, len)
  38.  
  39.  
  40. #define DELETE(adr)            if(adr){ beginDelete( __FILE__, __LINE__, adr, 0); \
  41.                                         delete adr; endDelete( __FILE__, __LINE__, adr, 0); adr = 0;} else {;}
  42. #define DELETE_VEC(adr)        if(adr){ beginDelete( __FILE__, __LINE__, adr, 1); \
  43.                                         delete [] adr; endDelete( __FILE__, __LINE__, adr, 1); adr = 0; } else {;}
  44. #define DELETE_NZ(adr)        if(1){ beginDelete( __FILE__, __LINE__, adr, 0); \
  45.                                         delete [] adr; endDelete( __FILE__, __LINE__, adr, 0); } else {;}
  46. #define DELETE_STR(adr)        if(adr){ beginDelete( __FILE__, __LINE__, adr, 1); \
  47.                                         delete [] adr; endDelete( __FILE__, __LINE__, adr, 1); adr = 0; } else {;}
  48.  
  49. //--- non heaptrace macro versions
  50. #else
  51.  
  52. //--- function prototypes required by macros
  53. extern char* strndup (char*,unsigned long);
  54.  
  55. //--- macros for Heap operations
  56. #define NEW(type,par)                new type par
  57. #define NEW_VEC(type,dim)            new type [dim]
  58. #define NEW_VEC2(type,dim1,dim2)    new type [dim1] [dim2]
  59.  
  60. #define NEW_STR(pchar)                strndup( pchar, 0)
  61. #define NEW_STRN(pchar,len)            strndup( pchar, len)
  62.  
  63. #define DELETE(adr)                    if(adr){ delete adr; adr=0; } else {;}
  64. #define DELETE_VEC(adr)                if(adr){ delete [] adr; adr=0; } else {;}
  65. #define DELETE_STR(adr)                if(adr){ delete [] adr; adr=0; } else {;}
  66. #define DELETE_NZ(adr)                delete adr;
  67.  
  68. #endif //__HEAPTRACE__
  69.  
  70.  
  71.  
  72. #endif // BSA_INCLUDED