Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members | Tutorials

irrAllocator.h

Go to the documentation of this file.
00001 // Copyright (C) 2002-2010 Nikolaus Gebhardt
00002 // This file is part of the "Irrlicht Engine" and the "irrXML" project.
00003 // For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h
00004 
00005 #ifndef __IRR_ALLOCATOR_H_INCLUDED__
00006 #define __IRR_ALLOCATOR_H_INCLUDED__
00007 
00008 #include "irrTypes.h"
00009 #include <new>
00010 // necessary for older compilers
00011 #include <memory.h>
00012 
00013 namespace irr
00014 {
00015 namespace core
00016 {
00017 
00018 #ifdef DEBUG_CLIENTBLOCK
00019 #undef DEBUG_CLIENTBLOCK
00020 #define DEBUG_CLIENTBLOCK new
00021 #endif
00022 
00024 template<typename T>
00025 class irrAllocator
00026 {
00027 public:
00028 
00030         virtual ~irrAllocator() {}
00031 
00033         T* allocate(size_t cnt)
00034         {
00035                 return (T*)internal_new(cnt* sizeof(T));
00036         }
00037 
00039         void deallocate(T* ptr)
00040         {
00041                 internal_delete(ptr);
00042         }
00043 
00045         void construct(T* ptr, const T&e)
00046         {
00047                 new ((void*)ptr) T(e);
00048         }
00049 
00051         void destruct(T* ptr)
00052         {
00053                 ptr->~T();
00054         }
00055 
00056 protected:
00057 
00058         virtual void* internal_new(size_t cnt)
00059         {
00060                 return operator new(cnt);
00061         }
00062 
00063         virtual void internal_delete(void* ptr)
00064         {
00065                 operator delete(ptr);
00066         }
00067 
00068 };
00069 
00070 
00072 
00074 template<typename T>
00075 class irrAllocatorFast
00076 {
00077 public:
00078 
00080         T* allocate(size_t cnt)
00081         {
00082                 return (T*)operator new(cnt* sizeof(T));
00083         }
00084 
00086         void deallocate(T* ptr)
00087         {
00088                 operator delete(ptr);
00089         }
00090 
00092         void construct(T* ptr, const T&e)
00093         {
00094                 new ((void*)ptr) T(e);
00095         }
00096 
00098         void destruct(T* ptr)
00099         {
00100                 ptr->~T();
00101         }
00102 };
00103 
00104 
00105 
00106 #ifdef DEBUG_CLIENTBLOCK
00107 #undef DEBUG_CLIENTBLOCK
00108 #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
00109 #endif
00110 
00112 enum eAllocStrategy
00113 {
00114         ALLOC_STRATEGY_SAFE    = 0,
00115         ALLOC_STRATEGY_DOUBLE  = 1,
00116         ALLOC_STRATEGY_SQRT    = 2
00117 };
00118 
00119 
00120 } // end namespace core
00121 } // end namespace irr
00122 
00123 #endif
00124 

The Irrlicht Engine
The Irrlicht Engine Documentation © 2003-2010 by Nikolaus Gebhardt. Generated on Sun Oct 24 12:41:57 2010 by Doxygen (1.6.2)