mymemory: kill system_free()
[c11tester.git] / mymemory.h
index 56e690436d1e573da00bf287e6aff2388f476c0c..b7936d8444e068298e1f456bfc5ae9c8bdc5abd3 100644 (file)
@@ -9,30 +9,44 @@
 
 /** MEMALLOC declares the allocators for a class to allocate
  *     memory in the non-snapshotting heap. */
-
 #define MEMALLOC \
        void * operator new(size_t size) { \
-               return MYMALLOC(size);\
-       }\
+               return model_malloc(size); \
+       } \
        void operator delete(void *p, size_t size) { \
-               MYFREE( p ); \
-       }\
+               model_free(p); \
+       } \
        void * operator new[](size_t size) { \
-               return MYMALLOC(size);\
-       }\
-       void operator delete[](void *p, size_t size) {\
-               MYFREE(p);\
+               return model_malloc(size); \
+       } \
+       void operator delete[](void *p, size_t size) { \
+               model_free(p); \
        }
 
 /** SNAPSHOTALLOC declares the allocators for a class to allocate
  *     memory in the snapshotting heap. */
+#define SNAPSHOTALLOC \
+       void * operator new(size_t size) { \
+               return snapshot_malloc(size); \
+       } \
+       void operator delete(void *p, size_t size) { \
+               snapshot_free(p); \
+       } \
+       void * operator new[](size_t size) { \
+               return snapshot_malloc(size); \
+       } \
+       void operator delete[](void *p, size_t size) { \
+               snapshot_free(p); \
+       }
 
-#define SNAPSHOTALLOC
+void *model_malloc(size_t size);
+void *model_calloc(size_t count, size_t size);
+void model_free(void *ptr);
 
-void *MYMALLOC(size_t size);
-void MYFREE(void *ptr);
+void * snapshot_malloc(size_t size);
+void * snapshot_calloc(size_t count, size_t size);
+void snapshot_free(void *ptr);
 
-void system_free( void * ptr );
 void *system_malloc( size_t size );
 
 /** @brief Provides a non-snapshotting allocator for use in STL classes.
@@ -45,88 +59,87 @@ void *system_malloc( size_t size );
  * This software is provided "as is" without express or implied
  * warranty, and with no claim as to its suitability for any purpose.
  */
-
 template <class T>
-   class MyAlloc {
    public:
-       // type definitions
-       typedef T        value_type;
-       typedef T*       pointer;
-       typedef const T* const_pointer;
-       typedef T&       reference;
-       typedef const T& const_reference;
-       typedef size_t   size_type;
-       typedef size_t difference_type;
-
-       // rebind allocator to type U
-       template <class U>
-       struct rebind {
-           typedef MyAlloc<U> other;
-       };
-
-       // return address of values
-       pointer address (reference value) const {
-           return &value;
-       }
-       const_pointer address (const_reference value) const {
-           return &value;
-       }
-
-       /* constructors and destructor
-        * - nothing to do because the allocator has no state
-        */
-       MyAlloc() throw() {
-       }
-       MyAlloc(const MyAlloc&) throw() {
-       }
-       template <class U>
-         MyAlloc (const MyAlloc<U>&) throw() {
-       }
-       ~MyAlloc() throw() {
-       }
-
-       // return maximum number of elements that can be allocated
-       size_type max_size () const throw() {
-           return std::numeric_limits<size_t>::max() / sizeof(T);
-       }
-
-       // allocate but don't initialize num elements of type T
-       pointer allocate (size_type num, const void* = 0) {
-           pointer p = ( pointer )MYMALLOC( num * sizeof( T ) );
-           return p;
-       }
-
-       // initialize elements of allocated storage p with value value
-       void construct (pointer p, const T& value) {
-           // initialize memory with placement new
-           new((void*)p)T(value);
-       }
-
-       // destroy elements of initialized storage p
-       void destroy (pointer p) {
-           // destroy objects by calling their destructor
-           p->~T();
-       }
-
-       // deallocate storage p of deleted elements
-       void deallocate (pointer p, size_type num) {
-           MYFREE((void*)p);
-       }
-   };
+class ModelAlloc {
+ public:
+       // type definitions
+       typedef T        value_type;
+       typedef T*       pointer;
+       typedef const T* const_pointer;
+       typedef T&       reference;
+       typedef const T& const_reference;
+       typedef size_t   size_type;
+       typedef size_t   difference_type;
+
+       // rebind allocator to type U
+       template <class U>
+       struct rebind {
+               typedef ModelAlloc<U> other;
+       };
+
+       // return address of values
+       pointer address(reference value) const {
+               return &value;
+       }
+       const_pointer address(const_reference value) const {
+               return &value;
+       }
+
+       /* constructors and destructor
+        * - nothing to do because the allocator has no state
+        */
+       ModelAlloc() throw() {
+       }
+       ModelAlloc(const ModelAlloc&) throw() {
+       }
+       template <class U>
+       ModelAlloc(const ModelAlloc<U>&) throw() {
+       }
+       ~ModelAlloc() throw() {
+       }
+
+       // return maximum number of elements that can be allocated
+       size_type max_size() const throw() {
+               return std::numeric_limits<size_t>::max() / sizeof(T);
+       }
+
+       // allocate but don't initialize num elements of type T
+       pointer allocate(size_type num, const void * = 0) {
+               pointer p = (pointer)model_malloc(num * sizeof(T));
+               return p;
+       }
+
+       // initialize elements of allocated storage p with value value
+       void construct(pointer p, const T& value) {
+               // initialize memory with placement new
+               new((void*)p)T(value);
+       }
+
+       // destroy elements of initialized storage p
+       void destroy(pointer p) {
+               // destroy objects by calling their destructor
+               p->~T();
+       }
+
+       // deallocate storage p of deleted elements
+       void deallocate(pointer p, size_type num) {
+               model_free((void*)p);
+       }
+};
 
 /** Return that all specializations of this allocator are interchangeable. */
- template <class T1, class T2>
- bool operator== (const MyAlloc<T1>&,
-                  const MyAlloc<T2>&) throw() {
-     return true;
- }
+template <class T1, class T2>
+bool operator== (const ModelAlloc<T1>&,
+               const ModelAlloc<T2>&) throw() {
+       return true;
+}
 
 /** Return that all specializations of this allocator are interchangeable. */
- template <class T1, class T2>
- bool operator!= (const MyAlloc<T1>&,
-                  const MyAlloc<T2>&) throw() {
-     return false;
- }
+template <class T1, class T2>
+bool operator!= (const ModelAlloc<T1>&,
+               const ModelAlloc<T2>&) throw() {
+       return false;
+}
 
 #ifdef __cplusplus
 extern "C" {
@@ -139,7 +152,6 @@ extern void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size);
 extern mspace create_mspace_with_base(void* base, size_t capacity, int locked);
 extern mspace create_mspace(size_t capacity, int locked);
 extern mspace mySpace;
-extern void * basemySpace;
 #ifdef __cplusplus
 };  /* end of extern "C" */
 #endif