17 #ifndef DOXYGEN_SHOULD_SKIP_THIS
26 void*
operator new(
size_t size)
throw (std::bad_alloc);
27 void operator delete(
void *p)
throw();
30 void*
operator new[](
size_t size)
throw(std::bad_alloc);
31 void operator delete[](
void *p)
throw();
33 #ifdef TRACE_MEMORY_ALLOCS
34 #define SG_MALLOC(type, len) sg_generic_malloc<type>(size_t(len), __FILE__, __LINE__)
35 #define SG_CALLOC(type, len) sg_generic_calloc<type>(size_t(len), __FILE__, __LINE__)
36 #define SG_REALLOC(type, ptr, old_len, len) sg_generic_realloc<type>(ptr, size_t(old_len), size_t(len), __FILE__, __LINE__)
37 #define SG_FREE(ptr) sg_generic_free(ptr)
38 #else //TRACE_MEMORY_ALLOCS
40 #define SG_MALLOC(type, len) sg_generic_malloc<type>(size_t(len))
41 #define SG_CALLOC(type, len) sg_generic_calloc<type>(size_t(len))
42 #define SG_REALLOC(type, ptr, old_len, len) sg_generic_realloc<type>(ptr, size_t(old_len), size_t(len))
43 #define SG_FREE(ptr) sg_generic_free(ptr)
44 #endif //TRACE_MEMORY_ALLOCS
48 template <
class T>
class SGVector;
49 template <
class T>
class SGSparseVector;
50 template <
class T>
class SGMatrix;
52 #ifdef TRACE_MEMORY_ALLOCS
53 void*
sg_malloc(
size_t size,
const char* file,
int line);
54 template <
class T> T* sg_generic_malloc(
size_t len,
const char* file,
int line)
56 return (T*)
sg_malloc(
sizeof(T)*len, file, line);
59 void*
sg_calloc(
size_t num,
size_t size,
const char* file,
int line);
60 template <
class T> T* sg_generic_calloc(
size_t len,
const char* file,
int line)
62 return (T*)
sg_calloc(len,
sizeof(T), file, line);
65 void*
sg_realloc(
void* ptr,
size_t size,
const char* file,
int line);
66 template <
class T> T* sg_generic_realloc(T* ptr,
size_t old_len,
size_t len,
const char* file,
int line)
68 return (T*)
sg_realloc(ptr,
sizeof(T)*len, file, line);
72 template <
class T>
void sg_generic_free(T* ptr)
76 #else //TRACE_MEMORY_ALLOCS
78 template <
class T> T* sg_generic_malloc(
size_t len)
84 template <
class T> T* sg_generic_realloc(T* ptr,
size_t old_len,
size_t len)
90 template <
class T> T* sg_generic_calloc(
size_t len)
96 template <
class T>
void sg_generic_free(T* ptr)
100 #endif //TRACE_MEMORY_ALLOCS
101 #ifdef TRACE_MEMORY_ALLOCS
112 MemoryBlock(
void* p);
119 MemoryBlock(
void* p,
size_t sz,
const char* fname=NULL,
int linenr=-1);
123 MemoryBlock(
const MemoryBlock &b);
128 bool operator==(
const MemoryBlock &b)
const;
141 void list_memory_allocs();
144 #ifdef TRACE_MEMORY_ALLOCS
145 #define SG_SPECIALIZED_MALLOC(type) \
146 template<> type* sg_generic_malloc<type >(size_t len, const char* file, int line); \
147 template<> type* sg_generic_calloc<type >(size_t len, const char* file, int line); \
148 template<> type* sg_generic_realloc<type >(type* ptr, size_t old_len, size_t len, const char* file, int line); \
149 template<> void sg_generic_free<type >(type* ptr);
150 #else // TRACE_MEMORY_ALLOCS
151 #define SG_SPECIALIZED_MALLOC(type) \
152 template<> type* sg_generic_malloc<type >(size_t len); \
153 template<> type* sg_generic_calloc<type >(size_t len); \
154 template<> type* sg_generic_realloc<type >(type* ptr, size_t old_len, size_t len); \
155 template<> void sg_generic_free<type >(type* ptr);
156 #endif // TRACE_MEMORY_ALLOCS
202 #undef SG_SPECIALIZED_MALLOC
204 void* get_copy(
void* src,
size_t len);
205 char* get_strdup(
const char* str);
208 #endif // DOXYGEN_SHOULD_SKIP_THIS
210 #endif // __MEMORY_H__