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