1 #ifndef SC_MEMMGR_H
2 #define SC_MEMMGR_H
3 
4 #include <sc_export.h>
5 #include <stdlib.h>
6 
7 #if defined(SC_MEMMGR_ENABLE_CHECKS)
8 
9 /**
10     Platform specific defines
11 */
12 #if defined(__MSVC__) || defined(__BORLAND__)
13 #define THROW_STD_BAD_ALLOC
14 #define THROW_EMPTY
15 #else
16 #define THROW_STD_BAD_ALLOC     throw (std::bad_alloc)
17 #define THROW_EMPTY             throw ()
18 #endif
19 
20 #ifdef  __cplusplus
21 #include <stddef.h>
22 extern "C" {
23 #endif /* __cplusplus */
24 
25     SC_BASE_EXPORT void * sc_malloc_fn( unsigned int size, const char * file, const int line );
26     SC_BASE_EXPORT void * sc_calloc_fn( unsigned int count, unsigned int size, const char * file, const int line );
27     SC_BASE_EXPORT void * sc_realloc_fn( void * addr, unsigned int size, const char * file, const int line );
28     SC_BASE_EXPORT void   sc_free_fn( void * addr );
29 
30 #ifdef  __cplusplus
31 }
32 #endif /* __cplusplus */
33 
34 #ifdef __cplusplus
35 
36 SC_BASE_EXPORT void * sc_operator_new( size_t size, const char * file, const int line );
37 SC_BASE_EXPORT void   sc_operator_delete( void * addr, const char * file, const int line );
38 SC_BASE_EXPORT void   sc_operator_delete( void * addr );
39 
40 #endif /* __cplusplus */
41 
42 #ifndef SC_MEMMGR_CC
43 
44 #define sc_malloc(size)            sc_malloc_fn(size, __FILE__, __LINE__)
45 #define sc_calloc(count, size)     sc_calloc_fn(count, size, __FILE__, __LINE__)
46 #define sc_realloc(addr, size)     sc_realloc_fn(addr, size, __FILE__, __LINE__)
47 #define sc_free(addr)              sc_free_fn(addr)
48 
49 #ifdef  __cplusplus
50 
51 #include <new>
52 
new(size_t size,const char * file,const int line)53 inline void * operator new( size_t size, const char * file, const int line ) THROW_STD_BAD_ALLOC {
54     return sc_operator_new( size, file, line );
55 }
56 
57 inline void * operator new[]( size_t size, const char * file, const int line ) THROW_STD_BAD_ALLOC {
58     return sc_operator_new( size, file, line );
59 }
60 
delete(void * addr,const char * file,const int line)61 inline void operator delete( void * addr, const char * file, const int line ) THROW_STD_BAD_ALLOC {
62     sc_operator_delete( addr, file, line );
63 }
64 
65 inline void operator delete[]( void * addr, const char * file, const int line ) THROW_STD_BAD_ALLOC {
66     sc_operator_delete( addr, file, line );
67 }
68 
delete(void * addr)69 inline void operator delete( void * addr ) THROW_EMPTY {
70     sc_operator_delete( addr );
71 }
72 
73 inline void operator delete[]( void * addr ) THROW_EMPTY {
74     sc_operator_delete( addr );
75 }
76 
77 #define new new(__FILE__, __LINE__)
78 
79 #endif /* __cplusplus */
80 
81 #endif /* SC_MEMMGR_CC */
82 
83 #else
84 #define sc_malloc(size)            malloc(size)
85 #define sc_calloc(count, size)     calloc(count, size)
86 #define sc_realloc(addr, size)     realloc(addr, size)
87 #define sc_free(addr)              free(addr)
88 #endif /* SC_MEMMGR_ENABLE_CHECKS */
89 
90 #endif /* SC_MEMMGR_H */
91