Irrlicht 3D Engine
 
Loading...
Searching...
No Matches
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
13namespace irr
14{
15namespace core
16{
17
18#ifdef DEBUG_CLIENTBLOCK
19#undef DEBUG_CLIENTBLOCK
20#define DEBUG_CLIENTBLOCK new
21#endif
22
24template<typename T>
26{
27public:
28
30 virtual ~irrAllocator() {}
31
33 T* allocate(size_t cnt)
34 {
35 return (T*)internal_new(cnt* sizeof(T));
36 }
37
40 {
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
56protected:
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
74template<typename T>
76{
77public:
78
80 T* allocate(size_t cnt)
81 {
82 return (T*)operator new(cnt* sizeof(T));
83 }
84
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
118
119
120} // end namespace core
121} // end namespace irr
122
123#endif
124
Axis aligned bounding box in 3d dimensional space.
Definition aabbox3d.h:22
Fast allocator, only to be used in containers inside the same memory heap.
void construct(T *ptr, const T &e)
Construct an element.
void destruct(T *ptr)
Destruct an element.
void deallocate(T *ptr)
Deallocate memory for an array of objects.
T * allocate(size_t cnt)
Allocate memory for an array of objects.
Very simple allocator implementation, containers using it can be used across dll boundaries.
void construct(T *ptr, const T &e)
Construct an element.
void destruct(T *ptr)
Destruct an element.
void deallocate(T *ptr)
Deallocate memory for an array of objects.
T * allocate(size_t cnt)
Allocate memory for an array of objects.
virtual void internal_delete(void *ptr)
virtual void * internal_new(size_t cnt)
virtual ~irrAllocator()
Destructor.
eAllocStrategy
defines an allocation strategy
@ ALLOC_STRATEGY_DOUBLE
@ ALLOC_STRATEGY_SAFE
@ ALLOC_STRATEGY_SQRT
Everything in the Irrlicht Engine can be found in this namespace.
Definition aabbox3d.h:13