a bug fix
[c11tester.git] / mymemory.h
index f928797bc30f4aac90b45d25a342ab588cfa6a14..6b35f5d14f0efb46738d9389c2e8af72c9d3c6a7 100644 (file)
@@ -1,40 +1,59 @@
+/** @file mymemory.h
+ *  @brief Memory allocation functions.
+ */
+
 #ifndef _MY_MEMORY_H
 #define _MY_MEMORY_H
 #include <stdlib.h>
 #include <limits>
 
+/** 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);\
+               return model_malloc(size);\
        }\
        void operator delete[](void *p, size_t size) {\
-               MYFREE(p);\
+               model_free(p);\
        }
 
-/* Empty define; represents opposite of MEMALLOC */
+/** SNAPSHOTALLOC declares the allocators for a class to allocate
+ *     memory in the snapshotting heap. */
 #define SNAPSHOTALLOC
 
-void *MYMALLOC(size_t size);
-void MYFREE(void *ptr);
+void *model_malloc(size_t size);
+void *model_calloc(size_t count, size_t size);
+void model_free(void *ptr);
+
+static inline void * snapshot_malloc(size_t size) {
+       return malloc(size);
+}
+static inline void * snapshot_calloc(size_t count, size_t size) {
+       return calloc(count, size);
+}
+static inline void snapshot_free(void *ptr) {
+       free(ptr);
+}
 
 void system_free( void * ptr );
 void *system_malloc( size_t size );
-/*
-The following code example is taken from the book
-The C++ Standard Library - A Tutorial and Reference
-by Nicolai M. Josuttis, Addison-Wesley, 1999
-© Copyright Nicolai M. Josuttis 1999
-Permission to copy, use, modify, sell and distribute this software
-is granted provided this copyright notice appears in all copies.
-This software is provided "as is" without express or implied
-warranty, and with no claim as to its suitability for any purpose.
-*/
+
+/** @brief Provides a non-snapshotting allocator for use in STL classes.
+ *
+ * The code was adapted from a code example from the book The C++
+ * Standard Library - A Tutorial and Reference by Nicolai M. Josuttis,
+ * Addison-Wesley, 1999 © Copyright Nicolai M. Josuttis 1999
+ * Permission to copy, use, modify, sell and distribute this software
+ * is granted provided this copyright notice appears in all copies.
+ * 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:
@@ -81,7 +100,7 @@ template <class 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 ) );
+           pointer p = ( pointer )model_malloc( num * sizeof( T ) );
            return p;
        }
 
@@ -99,16 +118,18 @@ template <class T>
 
        // deallocate storage p of deleted elements
        void deallocate (pointer p, size_type num) {
-           MYFREE((void*)p);
+           model_free((void*)p);
        }
    };
 
-// return that all specializations of this allocator are interchangeable
+/** 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;
  }
+
+/** Return that all specializations of this allocator are interchangeable. */
  template <class T1, class T2>
  bool operator!= (const MyAlloc<T1>&,
                   const MyAlloc<T2>&) throw() {