Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members | Tutorials
irrAllocator.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine" and the "irrXML" project.
3 // For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h
4 
5 #ifndef __IRR_ALLOCATOR_H_INCLUDED__
6 #define __IRR_ALLOCATOR_H_INCLUDED__
7 
8 #include "irrTypes.h"
9 #include <new>
10 // necessary for older compilers
11 #include <memory.h>
12 
13 namespace irr
14 {
15 namespace core
16 {
17 
18 #ifdef DEBUG_CLIENTBLOCK
19 #undef DEBUG_CLIENTBLOCK
20 #define DEBUG_CLIENTBLOCK new
21 #endif
22 
24 template<typename T>
26 {
27 public:
28 
30  virtual ~irrAllocator() {}
31 
33  T* allocate(size_t cnt)
34  {
35  return (T*)internal_new(cnt* sizeof(T));
36  }
37 
39  void deallocate(T* ptr)
40  {
41  internal_delete(ptr);
42  }
43 
45  void construct(T* ptr, const T&e)
46  {
47  new ((void*)ptr) T(e);
48  }
49 
51  void destruct(T* ptr)
52  {
53  ptr->~T();
54  }
55 
56 protected:
57 
58  virtual void* internal_new(size_t cnt)
59  {
60  return operator new(cnt);
61  }
62 
63  virtual void internal_delete(void* ptr)
64  {
65  operator delete(ptr);
66  }
67 
68 };
69 
70 
72 
74 template<typename T>
76 {
77 public:
78 
80  T* allocate(size_t cnt)
81  {
82  return (T*)operator new(cnt* sizeof(T));
83  }
84 
86  void deallocate(T* ptr)
87  {
88  operator delete(ptr);
89  }
90 
92  void construct(T* ptr, const T&e)
93  {
94  new ((void*)ptr) T(e);
95  }
96 
98  void destruct(T* ptr)
99  {
100  ptr->~T();
101  }
102 };
103 
104 
105 
106 #ifdef DEBUG_CLIENTBLOCK
107 #undef DEBUG_CLIENTBLOCK
108 #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
109 #endif
110 
113 {
117 };
118 
119 
120 } // end namespace core
121 } // end namespace irr
122 
123 #endif
124 

The Irrlicht Engine
The Irrlicht Engine Documentation © 2003-2010 by Nikolaus Gebhardt. Generated on Mon May 6 2013 07:45:59 by Doxygen (1.8.1.2)