svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r20855:20928
[blender.git] / intern / memutil / MEM_Allocator.h
index 40716496d16f462fc8152f5b1d30cd0af4232121..b2c3c5e82e25544a0f71cd96e1b3dcbe68650b8f 100644 (file)
@@ -1,14 +1,11 @@
 /**
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  *
  * Contributor(s): Peter Schlaile <peter@schlaile.de> 2005
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  */
 
 #ifndef __MEM_Allocator_h_included__
 #define __MEM_Allocator_h_included__ 1
 
 #include "guardedalloc/MEM_guardedalloc.h"
+#include "guardedalloc/BLO_sys_types.h"
+
+#ifdef _MSC_VER
+#if _MSC_VER < 1300 // 1200 == VC++ 6.0 according to boost
+#define MS_VISUALC_6_0_WORKAROUND 1
+#endif
+#endif
 
 template<typename _Tp>
 struct MEM_Allocator
@@ -40,16 +44,20 @@ struct MEM_Allocator
        typedef const _Tp& const_reference;
        typedef _Tp        value_type;
 
+#ifndef MS_VISUALC_6_0_WORKAROUND
        template<typename _Tp1>
         struct rebind { 
                typedef MEM_Allocator<_Tp1> other; 
        };
+#endif
 
        MEM_Allocator() throw() {}
-       MEM_Allocator(const MEM_Allocator& __a) throw() {}
+       MEM_Allocator(const MEM_Allocator&) throw() {}
 
+#ifndef MS_VISUALC_6_0_WORKAROUND
        template<typename _Tp1>
-        MEM_Allocator(const MEM_Allocator<_Tp1> __a) throw() { }
+        MEM_Allocator(const MEM_Allocator<_Tp1>) throw() { }
+#endif
 
        ~MEM_Allocator() throw() {}
 
@@ -57,6 +65,11 @@ struct MEM_Allocator
 
        const_pointer address(const_reference __x) const { return &__x; }
 
+#ifdef MS_VISUALC_6_0_WORKAROUND
+       char *_Charalloc(size_type n) {
+               return (char *) MEM_mallocN(n, "STL MEM_Allocator VC6.0");
+       }
+#endif
        // NB: __n is permitted to be 0.  The C++ standard says nothing
        // about what the return value is when __n == 0.
        _Tp* allocate(size_type __n, const void* = 0) {
@@ -68,10 +81,17 @@ struct MEM_Allocator
                return __ret;
        }
 
+#ifndef MS_VISUALC_6_0_WORKAROUND
        // __p is not permitted to be a null pointer.
        void deallocate(pointer __p, size_type){ 
                MEM_freeN(__p);
        }
+#else
+       // __p is not permitted to be a null pointer.
+       void deallocate(void* __p, size_type){ 
+               MEM_freeN(__p);
+       }
+#endif
 
        size_type max_size() const throw() { 
                return size_t(-1) / sizeof(_Tp);