29#ifndef __MemoryAllocatorConfig_H__
30#define __MemoryAllocatorConfig_H__
190#if OGRE_MEMORY_ALLOCATOR == OGRE_MEMORY_ALLOCATOR_NEDPOOLING
205#elif OGRE_MEMORY_ALLOCATOR == OGRE_MEMORY_ALLOCATOR_NED
216 template <MemoryCategory Cat>
class CategorisedAllocPolicy :
public NedAllocPolicy{};
217 template <MemoryCategory Cat,
size_t align = 0>
class CategorisedAlignAllocPolicy :
public NedAlignedAllocPolicy<align>{};
220#elif OGRE_MEMORY_ALLOCATOR == OGRE_MEMORY_ALLOCATOR_STD
231 template <MemoryCategory Cat>
class CategorisedAllocPolicy :
public StdAllocPolicy{};
232 template <MemoryCategory Cat,
size_t align = 0>
class CategorisedAlignAllocPolicy :
public StdAlignedAllocPolicy<align>{};
370# define OGRE_MALLOC(bytes, category) ::Ogre::CategorisedAllocPolicy<category>::allocateBytes(bytes, __FILE__, __LINE__, __FUNCTION__)
372# define OGRE_ALLOC_T(T, count, category) static_cast<T*>(::Ogre::CategorisedAllocPolicy<category>::allocateBytes(sizeof(T)*(count), __FILE__, __LINE__, __FUNCTION__))
374# define OGRE_FREE(ptr, category) ::Ogre::CategorisedAllocPolicy<category>::deallocateBytes((void*)ptr)
377# define OGRE_NEW_T(T, category) new (::Ogre::CategorisedAllocPolicy<category>::allocateBytes(sizeof(T), __FILE__, __LINE__, __FUNCTION__)) T
379# define OGRE_NEW_ARRAY_T(T, count, category) ::Ogre::constructN(static_cast<T*>(::Ogre::CategorisedAllocPolicy<category>::allocateBytes(sizeof(T)*(count), __FILE__, __LINE__, __FUNCTION__)), count)
381# define OGRE_DELETE_T(ptr, T, category) if(ptr){(ptr)->~T(); ::Ogre::CategorisedAllocPolicy<category>::deallocateBytes((void*)ptr);}
383# define OGRE_DELETE_ARRAY_T(ptr, T, count, category) if(ptr){for (size_t b = 0; b < count; ++b) { (ptr)[b].~T();} ::Ogre::CategorisedAllocPolicy<category>::deallocateBytes((void*)ptr);}
387# define OGRE_MALLOC_SIMD(bytes, category) ::Ogre::CategorisedAlignAllocPolicy<category>::allocateBytes(bytes, __FILE__, __LINE__, __FUNCTION__)
389# define OGRE_MALLOC_ALIGN(bytes, category, align) ::Ogre::CategorisedAlignAllocPolicy<category, align>::allocateBytes(bytes, __FILE__, __LINE__, __FUNCTION__)
391# define OGRE_ALLOC_T_SIMD(T, count, category) static_cast<T*>(::Ogre::CategorisedAlignAllocPolicy<category>::allocateBytes(sizeof(T)*(count), __FILE__, __LINE__, __FUNCTION__))
393# define OGRE_ALLOC_T_ALIGN(T, count, category, align) static_cast<T*>(::Ogre::CategorisedAlignAllocPolicy<category, align>::allocateBytes(sizeof(T)*(count), __FILE__, __LINE__, __FUNCTION__))
395# define OGRE_FREE_SIMD(ptr, category) ::Ogre::CategorisedAlignAllocPolicy<category>::deallocateBytes(ptr)
397# define OGRE_FREE_ALIGN(ptr, category, align) ::Ogre::CategorisedAlignAllocPolicy<category, align>::deallocateBytes(ptr)
400# define OGRE_NEW_T_SIMD(T, category) new (::Ogre::CategorisedAlignAllocPolicy<category>::allocateBytes(sizeof(T), __FILE__, __LINE__, __FUNCTION__)) T
402# define OGRE_NEW_ARRAY_T_SIMD(T, count, category) ::Ogre::constructN(static_cast<T*>(::Ogre::CategorisedAlignAllocPolicy<category>::allocateBytes(sizeof(T)*(count), __FILE__, __LINE__, __FUNCTION__)), count)
404# define OGRE_DELETE_T_SIMD(ptr, T, category) if(ptr){(ptr)->~T(); ::Ogre::CategorisedAlignAllocPolicy<category>::deallocateBytes(ptr);}
406# define OGRE_DELETE_ARRAY_T_SIMD(ptr, T, count, category) if(ptr){for (size_t b = 0; b < count; ++b) { (ptr)[b].~T();} ::Ogre::CategorisedAlignAllocPolicy<category>::deallocateBytes(ptr);}
408# define OGRE_NEW_T_ALIGN(T, category, align) new (::Ogre::CategorisedAlignAllocPolicy<category, align>::allocateBytes(sizeof(T), __FILE__, __LINE__, __FUNCTION__)) T
410# define OGRE_NEW_ARRAY_T_ALIGN(T, count, category, align) ::Ogre::constructN(static_cast<T*>(::Ogre::CategorisedAlignAllocPolicy<category, align>::allocateBytes(sizeof(T)*(count), __FILE__, __LINE__, __FUNCTION__)), count)
412# define OGRE_DELETE_T_ALIGN(ptr, T, category, align) if(ptr){(ptr)->~T(); ::Ogre::CategorisedAlignAllocPolicy<category, align>::deallocateBytes(ptr);}
414# define OGRE_DELETE_ARRAY_T_ALIGN(ptr, T, count, category, align) if(ptr){for (size_t _b = 0; _b < count; ++_b) { (ptr)[_b].~T();} ::Ogre::CategorisedAlignAllocPolicy<category, align>::deallocateBytes(ptr);}
419# define OGRE_NEW new (__FILE__, __LINE__, __FUNCTION__)
420# define OGRE_DELETE delete
426# define OGRE_MALLOC(bytes, category) ::Ogre::CategorisedAllocPolicy<category>::allocateBytes(bytes)
428# define OGRE_ALLOC_T(T, count, category) static_cast<T*>(::Ogre::CategorisedAllocPolicy<category>::allocateBytes(sizeof(T)*(count)))
430# define OGRE_FREE(ptr, category) ::Ogre::CategorisedAllocPolicy<category>::deallocateBytes((void*)ptr)
433# define OGRE_NEW_T(T, category) new (::Ogre::CategorisedAllocPolicy<category>::allocateBytes(sizeof(T))) T
435# define OGRE_NEW_ARRAY_T(T, count, category) ::Ogre::constructN(static_cast<T*>(::Ogre::CategorisedAllocPolicy<category>::allocateBytes(sizeof(T)*(count))), count)
437# define OGRE_DELETE_T(ptr, T, category) if(ptr){(ptr)->~T(); ::Ogre::CategorisedAllocPolicy<category>::deallocateBytes((void*)ptr);}
439# define OGRE_DELETE_ARRAY_T(ptr, T, count, category) if(ptr){for (size_t b = 0; b < count; ++b) { (ptr)[b].~T();} ::Ogre::CategorisedAllocPolicy<category>::deallocateBytes((void*)ptr);}
443# define OGRE_MALLOC_SIMD(bytes, category) ::Ogre::CategorisedAlignAllocPolicy<category>::allocateBytes(bytes)
445# define OGRE_MALLOC_ALIGN(bytes, category, align) ::Ogre::CategorisedAlignAllocPolicy<category, align>::allocateBytes(bytes)
447# define OGRE_ALLOC_T_SIMD(T, count, category) static_cast<T*>(::Ogre::CategorisedAlignAllocPolicy<category>::allocateBytes(sizeof(T)*(count)))
449# define OGRE_ALLOC_T_ALIGN(T, count, category, align) static_cast<T*>(::Ogre::CategorisedAlignAllocPolicy<category, align>::allocateBytes(sizeof(T)*(count)))
451# define OGRE_FREE_SIMD(ptr, category) ::Ogre::CategorisedAlignAllocPolicy<category>::deallocateBytes((void*)ptr)
453# define OGRE_FREE_ALIGN(ptr, category, align) ::Ogre::CategorisedAlignAllocPolicy<category, align>::deallocateBytes((void*)ptr)
456# define OGRE_NEW_T_SIMD(T, category) new (::Ogre::CategorisedAlignAllocPolicy<category>::allocateBytes(sizeof(T))) T
458# define OGRE_NEW_ARRAY_T_SIMD(T, count, category) ::Ogre::constructN(static_cast<T*>(::Ogre::CategorisedAlignAllocPolicy<category>::allocateBytes(sizeof(T)*(count))), count)
460# define OGRE_DELETE_T_SIMD(ptr, T, category) if(ptr){(ptr)->~T(); ::Ogre::CategorisedAlignAllocPolicy<category>::deallocateBytes((void*)ptr);}
462# define OGRE_DELETE_ARRAY_T_SIMD(ptr, T, count, category) if(ptr){for (size_t b = 0; b < count; ++b) { (ptr)[b].~T();} ::Ogre::CategorisedAlignAllocPolicy<category>::deallocateBytes((void*)ptr);}
464# define OGRE_NEW_T_ALIGN(T, category, align) new (::Ogre::CategorisedAlignAllocPolicy<category, align>::allocateBytes(sizeof(T))) T
466# define OGRE_NEW_ARRAY_T_ALIGN(T, count, category, align) ::Ogre::constructN(static_cast<T*>(::Ogre::CategorisedAlignAllocPolicy<category, align>::allocateBytes(sizeof(T)*(count))), count)
468# define OGRE_DELETE_T_ALIGN(ptr, T, category, align) if(ptr){(ptr)->~T(); ::Ogre::CategorisedAlignAllocPolicy<category, align>::deallocateBytes((void*)ptr);}
470# define OGRE_DELETE_ARRAY_T_ALIGN(ptr, T, count, category, align) if(ptr){for (size_t _b = 0; _b < count; ++_b) { (ptr)[_b].~T();} ::Ogre::CategorisedAlignAllocPolicy<category, align>::deallocateBytes((void*)ptr);}
474# define OGRE_DELETE delete
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
An allocation policy for use with AllocatedObject and STLAllocator, which aligns memory at a given bo...
An allocation policy for use with AllocatedObject and STLAllocator.
Reference-counted shared pointer, used for objects where implicit destruction is required.
T * constructN(T *basePtr, size_t count)
Utility function for constructing an array of objects with placement new, without using new[] (which ...
MemoryCategory
A set of categories that indicate the purpose of a chunk of memory being allocated.
@ MEMCATEGORY_RESOURCE
Other resources.
@ MEMCATEGORY_ANIMATION
Animation data like tracks, bone matrices.
@ MEMCATEGORY_RENDERSYS
Rendersystem structures.
@ MEMCATEGORY_SCENE_CONTROL
Nodes, control data.
@ MEMCATEGORY_GENERAL
General purpose.
@ MEMCATEGORY_SCRIPTING
Scripting.
@ MEMCATEGORY_GEOMETRY
Geometry held in main memory.
@ MEMCATEGORY_SCENE_OBJECTS
Scene object instances.
SceneCtlAllocatedObject ShadowDataAlloc
GeneralAllocatedObject DynLibAlloc
RenderSysAllocatedObject RenderSysAlloc
SceneObjAllocatedObject SubEntityAlloc
CategorisedAllocPolicy< Ogre::MEMCATEGORY_RESOURCE > ResourceAllocPolicy
ResourceAllocatedObject TechniqueAlloc
AllocatedObject< GeometryAllocPolicy > GeometryAllocatedObject
GeneralAllocatedObject ImageAlloc
AllocatedObject< AnimationAllocPolicy > AnimationAllocatedObject
ResourceAllocatedObject TextureUnitStateAlloc
AllocatedObject< ScriptingAllocPolicy > ScriptingAllocatedObject
GeneralAllocatedObject ProfilerAlloc
ResourceAllocatedObject ResourceAlloc
ResourceAllocatedObject SubMeshAlloc
ScriptingAllocatedObject ScriptCompilerAlloc
GeometryAllocatedObject IndexDataAlloc
GeneralAllocatedObject TimerAlloc
GeneralAllocatedObject ConfigAlloc
GeneralAllocatedObject ArchiveAlloc
RenderSysAllocatedObject ViewportAlloc
AnimationAllocatedObject AnimationAlloc
GeometryAllocatedObject EdgeDataAlloc
GeometryAllocatedObject ProgMeshAlloc
CategorisedAllocPolicy< Ogre::MEMCATEGORY_SCRIPTING > ScriptingAllocPolicy
RenderSysAllocatedObject BufferAlloc
CategorisedAllocPolicy< Ogre::MEMCATEGORY_SCENE_OBJECTS > SceneObjAllocPolicy
ScriptingAllocatedObject ScriptTranslatorAlloc
CategorisedAllocPolicy< Ogre::MEMCATEGORY_RENDERSYS > RenderSysAllocPolicy
AllocatedObject< RenderSysAllocPolicy > RenderSysAllocatedObject
ResourceAllocatedObject CompositorInstAlloc
SceneCtlAllocatedObject LodAlloc
CategorisedAllocPolicy< Ogre::MEMCATEGORY_ANIMATION > AnimationAllocPolicy
GeneralAllocatedObject CodecAlloc
GeometryAllocatedObject DebugGeomAlloc
AllocatedObject< SceneObjAllocPolicy > SceneObjAllocatedObject
SceneObjAllocatedObject MovableAlloc
CategorisedAllocPolicy< Ogre::MEMCATEGORY_SCENE_CONTROL > SceneCtlAllocPolicy
GeometryAllocatedObject BatchedGeometryAlloc
CategorisedAllocPolicy< Ogre::MEMCATEGORY_GEOMETRY > GeometryAllocPolicy
RenderSysAllocatedObject GpuParamsAlloc
GeneralAllocatedObject FileSystemLayerAlloc
AllocatedObject< SceneCtlAllocPolicy > SceneCtlAllocatedObject
GeneralAllocatedObject RootAlloc
GeometryAllocatedObject VertexDataAlloc
GeneralAllocatedObject StreamAlloc
GeneralAllocatedObject SerializerAlloc
SceneCtlAllocatedObject RenderQueueAlloc
SceneCtlAllocatedObject SceneMgtAlloc
SceneCtlAllocatedObject NodeAlloc
GeneralAllocatedObject PluginAlloc
GeneralAllocatedObject ControllerAlloc
SceneObjAllocatedObject FXAlloc
AllocatedObject< GeneralAllocPolicy > GeneralAllocatedObject
GeneralAllocatedObject LogAlloc
CategorisedAllocPolicy< Ogre::MEMCATEGORY_GENERAL > GeneralAllocPolicy
AllocatedObject< ResourceAllocPolicy > ResourceAllocatedObject
AnimationAllocatedObject AnimableAlloc
ResourceAllocatedObject PassAlloc
ScriptingAllocatedObject AbstractNodeAlloc
GeneralAllocatedObject UtilityAlloc
GeometryAllocatedObject PatchAlloc
void deletePtr(T *ptr)
Function which invokes OGRE_DELETE on a given pointer.
GeneralAllocatedObject FactoryAlloc
SceneObjAllocatedObject OverlayAlloc