目录

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_