Itasca C++ Interface
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
basememory.h
Go to the documentation of this file.
1 #include <stdlib.h>
2 
3 #pragma once
4 
13 #include "basedef.h"
14 #include <new>
15  //#pragma warning(disable:3663)
16 
17 namespace itasca {
18  namespace memory {
19  typedef void(*MemoryCleanupFunction)();
20 
21  void initialize();
22  void shutdown();
23  BASE_EXPORT bool heapCheck(void *memptr = nullptr);
24  BASE_EXPORT unsigned long long getMemory();
25  BASE_EXPORT MemoryCleanupFunction addCleanupFunction(MemoryCleanupFunction func);
26  BASE_EXPORT void * imalloc(size_t s, const char *file, unsigned len);
27  BASE_EXPORT void * imalloc(size_t s);
28  BASE_EXPORT void ifree(void *v);
29  BASE_EXPORT void * irealloc(void *v, size_t s);
30  } // namespace memory
31 } // namespace itasca
32 
33 #ifdef _WIN32
34 #ifdef __INTEL_COMPILER
35 #pragma warning(disable:3663)
36 inline void *operator new(size_t s) { return itasca::memory::imalloc(s); }
37 inline void *operator new[](size_t s) { return itasca::memory::imalloc(s); }
38 inline void operator delete(void *v) { itasca::memory::ifree(v); }
39 inline void operator delete[](void *v) { itasca::memory::ifree(v); }
40 #endif
41 # ifndef __PLACEMENT_NEW_INLINE
42 void *operator new(size_t, void *v) { return(v); }
43 void operator delete(void *, void *) { }
44 # define __PLACEMENT_NEW_INLINE
45 # endif
46 # ifndef __PLACEMENT_VEC_NEW_INLINE
47 void *operator new[](size_t, void *v) { return(v); }
48 void operator delete[](void *, void *) {}
49 # define __PLACEMENT_VEC_NEW_INLINE
50 # endif
51 
52 # ifdef _DEBUG
53 # define NEW(x) new(x,__FILE__,__LINE__)
57 # define NEWC(x) new(#x,__FILE__,__LINE__) x
58 inline void *operator new(size_t s, const char *, const char *file, unsigned line)
59 {
60  return itasca::memory::imalloc(s, file, line);
61 }
62 inline void *operator new[](size_t s, const char *, const char *file, unsigned line)
63 {
64  return itasca::memory::imalloc(s, file, line);
65 }
66 inline void operator delete(void *v, const char *, const char *, unsigned) { itasca::memory::ifree(v); }
67 inline void operator delete[](void *v, const char *, const char *, unsigned) { itasca::memory::ifree(v); }
68 # else // _DEBUG
69 # define NEW(x) new
73 # define NEWC(x) new x
74 # endif // _DEBUG
75 #endif // _WIN32
76 
77 
78 #ifdef __LINUX
79 inline void* operator new(size_t s) { return itasca::memory::imalloc(s); }
82 inline void* operator new[](size_t s) { return itasca::memory::imalloc(s); }
84 inline void operator delete(void* v) { itasca::memory::ifree(v); }
86 inline void operator delete[](void* v) { itasca::memory::ifree(v); }
87 /*
88 # ifndef __PLACEMENT_NEW_INLINE
89  inline void *operator new(size_t,void *v) { return(v); }
90  inline void operator delete(void *,void *) { }
91 # define __PLACEMENT_NEW_INLINE
92 # endif
93 # ifndef __PLACEMENT_VEC_NEW_INLINE
94  inline void *operator new[](size_t,void *v) { return(v); }
95  inline void operator delete[](void *,void *) { }
96 # define __PLACEMENT_VEC_NEW_INLINE
97 # endif
98 */
99 # ifdef _DEBUG
100 # define NEW(x) new(x,__FILE__,__LINE__)
104 # define NEWC(x) new(#x,__FILE__,__LINE__) x
105 inline void* operator new(size_t s, const char*, const char* file, unsigned line)
106 {
107  return itasca::memory::imalloc(s, file, line);
108 }
109 inline void* operator new[](size_t s, const char*, const char* file, unsigned line)
110 {
111  return itasca::memory::imalloc(s, file, line);
112 }
113 inline void operator delete(void* v, const char*, const char*, unsigned) { itasca::memory::ifree(v); }
114 inline void operator delete[](void* v, const char*, const char*, unsigned) { itasca::memory::ifree(v); }
115 # else // _DEBUG
116 # define NEW(x) new
120 # define NEWC(x) new x
121 # endif // _DEBUG
122 #endif // ifdef linux
123 
124 
126 // EoF
namespace Itasca
Definition: basememory.cpp:9
#define BASE_EXPORT
Definition: basedef.h:21
Base type definitions - if QT is not in use.