Version
menu_open
link

include/AK/SoundEngine/Common/IAkPluginMemAlloc.h

Go to the documentation of this file.
00001 
00002 //
00003 // Copyright (c) 2006 Audiokinetic Inc. / All Rights Reserved
00004 //
00006 
00009 
00010 #ifndef _IAKPLUGINMEMALLOC_H_
00011 #define _IAKPLUGINMEMALLOC_H_
00012 
00013 #include <AK/SoundEngine/Common/AkTypes.h>
00014 #include <AK/SoundEngine/Common/AkMemoryMgr.h> // For AK_MEMDEBUG
00015 
00016 namespace AK
00017 {
00024     class IAkPluginMemAlloc
00025     {
00026     protected:
00028         virtual ~IAkPluginMemAlloc(){}
00029 
00030     public:
00031         
00036         virtual void * Malloc( 
00037             size_t in_uSize     
00038             ) = 0;
00039 
00043         virtual void Free(
00044             void * in_pMemAddress   
00045             ) = 0;
00046 
00047 #if defined (AK_MEMDEBUG)
00048 
00049 
00050 
00051         virtual void * dMalloc( 
00052             size_t   in_uSize,      
00053             const char*  in_pszFile,
00054             AkUInt32 in_uLine       
00055             ) = 0;
00056 #endif
00057     };
00058 }
00059 
00060 // Memory allocation macros to be used by sound engine plug-ins.
00061 #if defined (AK_MEMDEBUG)
00062 
00063     AkForceInline void * operator new(size_t size,AK::IAkPluginMemAlloc * in_pAllocator,const char* szFile,AkUInt32 ulLine) throw()
00064     {
00065         return in_pAllocator->dMalloc( size, szFile, ulLine );
00066     }
00067 
00068 #ifndef AK_3DS
00069         AkForceInline void operator delete(void *, AK::IAkPluginMemAlloc *, const char*, AkUInt32) throw() {}
00070 #endif
00071     
00072 #endif
00073 
00074     AkForceInline void * operator new(size_t size,AK::IAkPluginMemAlloc * in_pAllocator) throw()
00075     {
00076         return in_pAllocator->Malloc( size );
00077     }
00078     
00079     #ifdef AK_PS3
00080     AkForceInline void * operator new(size_t size, unsigned int align, AK::IAkPluginMemAlloc * in_pAllocator) throw()
00081     {
00082         return in_pAllocator->Malloc( size );
00083     }
00084     #endif
00085 
00086     #ifndef AK_3DS
00087     AkForceInline void operator delete(void *,AK::IAkPluginMemAlloc *) throw() {}
00088     #endif
00089 
00090 #if defined (AK_MEMDEBUG)
00091     #define AK_PLUGIN_NEW(_allocator,_what)             new((_allocator),__FILE__,__LINE__) _what
00092     #define AK_PLUGIN_ALLOC(_allocator,_size)           (_allocator)->dMalloc((_size),__FILE__,__LINE__)
00093 #else
00094 
00095 
00096 
00097 
00098 
00099 
00100 
00101 
00102     #define AK_PLUGIN_NEW(_allocator,_what)             new(_allocator) _what
00103 
00104 
00105 
00106 
00107 
00108 
00109 
00110 
00111     #define AK_PLUGIN_ALLOC(_allocator,_size)           (_allocator)->Malloc((_size))
00112 #endif
00113 
00120 template <class T>
00121 AkForceInline void AK_PLUGIN_DELETE( AK::IAkPluginMemAlloc * in_pAllocator, T * in_pObject )      
00122 {
00123     if ( in_pObject )
00124     {
00125         in_pObject->~T();
00126         in_pAllocator->Free( in_pObject );
00127     }
00128 }
00129 
00136 #define AK_PLUGIN_FREE(_allocator,_pvmem)       (_allocator)->Free((_pvmem))
00137 
00138 #endif // _IAKPLUGINMEMALLOC_H_

Was this page helpful?

Need Support?

Questions? Problems? Need more info? Contact us, and we can help!

Visit our Support page

Tell us about your project. We're here to help.

Register your project and we'll help you get started with no strings attached!

Get started with Wwise