README.md: add linux locks example
[model-checker.git] / mymemory.h
index a2a9096dcded46bc8a955269d4468084cea059df..a62ab83b9ce5cbcd82999bc9463b2949ba7a0394 100644 (file)
@@ -4,8 +4,8 @@
 
 #ifndef _MY_MEMORY_H
 #define _MY_MEMORY_H
-#include <stdlib.h>
 #include <limits>
+#include <stddef.h>
 
 #include "config.h"
 
@@ -23,6 +23,9 @@
        } \
        void operator delete[](void *p, size_t size) { \
                model_free(p); \
+       } \
+       void * operator new(size_t size, void *p) { /* placement new */ \
+               return p; \
        }
 
 /** SNAPSHOTALLOC declares the allocators for a class to allocate
@@ -39,6 +42,9 @@
        } \
        void operator delete[](void *p, size_t size) { \
                snapshot_free(p); \
+       } \
+       void * operator new(size_t size, void *p) { /* placement new */ \
+               return p; \
        }
 
 void *model_malloc(size_t size);
@@ -50,6 +56,9 @@ void * snapshot_calloc(size_t count, size_t size);
 void * snapshot_realloc(void *ptr, size_t size);
 void snapshot_free(void *ptr);
 
+void * Thread_malloc(size_t size);
+void Thread_free(void *ptr);
+
 /** @brief Provides a non-snapshotting allocator for use in STL classes.
  *
  * The code was adapted from a code example from the book The C++
@@ -237,19 +246,19 @@ bool operator!= (const SnapshotAlloc<T1>&,
 #ifdef __cplusplus
 extern "C" {
 #endif
-typedef void * mspace;
-extern void* mspace_malloc(mspace msp, size_t bytes);
-extern void mspace_free(mspace msp, void* mem);
-extern void* mspace_realloc(mspace msp, void* mem, size_t newsize);
-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);
+       typedef void * mspace;
+       extern void * mspace_malloc(mspace msp, size_t bytes);
+       extern void mspace_free(mspace msp, void* mem);
+       extern void * mspace_realloc(mspace msp, void* mem, size_t newsize);
+       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);
 
 #if USE_MPROTECT_SNAPSHOT
-extern mspace user_snapshot_space;
+       extern mspace user_snapshot_space;
 #endif
 
-extern mspace model_snapshot_space;
+       extern mspace model_snapshot_space;
 
 #ifdef __cplusplus
 };  /* end of extern "C" */