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_
Questions? Problems? Need more info? Contact us, and we can help!
Visit our Support pageRegister your project and we'll help you get started with no strings attached!
Get started with Wwise