123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #ifndef _IAKPLUGINMEMALLOC_H_
- #define _IAKPLUGINMEMALLOC_H_
- #include <AK/SoundEngine/Common/AkTypes.h>
- #include <AK/SoundEngine/Common/AkMemoryMgr.h>
- namespace AK
- {
-
-
-
-
- class IAkPluginMemAlloc
- {
- protected:
-
- virtual ~IAkPluginMemAlloc(){}
- public:
-
-
-
-
- virtual void * Malloc(
- size_t in_uSize,
- const char* in_pszFile,
- AkUInt32 in_uLine
- ) = 0;
-
-
-
- virtual void Free(
- void * in_pMemAddress
- ) = 0;
-
-
-
-
- virtual void * Malign(
- size_t in_uSize,
- size_t in_uAlignment,
- const char* in_pszFile,
- AkUInt32 in_uLine
- ) = 0;
-
-
-
-
- virtual void * Realloc(
- void * in_pMemAddress,
- size_t in_uSize,
- const char* in_pszFile,
- AkUInt32 in_uLine
- ) = 0;
-
-
-
-
- virtual void * ReallocAligned(
- void * in_pMemAddress,
- size_t in_uSize,
- size_t in_uAlignment,
- const char* in_pszFile,
- AkUInt32 in_uLine
- ) = 0;
- };
- }
- AkForceInline void * operator new( size_t size, AK::IAkPluginMemAlloc * in_pAllocator, const char * szFile, AkUInt32 ulLine) throw()
- {
- return in_pAllocator->Malloc( size, szFile, ulLine );
- }
- AkForceInline void* operator new(size_t size, AK::IAkPluginMemAlloc* in_pAllocator) throw()
- {
- return in_pAllocator->Malloc(size, NULL, 0);
- }
- AkForceInline void operator delete( void *, AK::IAkPluginMemAlloc *, const char *, AkUInt32 ) throw() {}
- AkForceInline void operator delete( void *, AK::IAkPluginMemAlloc * ) throw() {}
-
-
-
-
-
-
-
-
- #define AK_PLUGIN_NEW( _allocator, _what ) new( ( _allocator ), __FILE__, __LINE__ ) _what
-
-
-
-
-
-
-
-
-
- #define AK_PLUGIN_ALLOC( _allocator, _size ) ( _allocator )->Malloc( ( _size ), __FILE__, __LINE__ )
-
-
-
-
-
-
-
-
-
- #define AK_PLUGIN_ALLOC_ALIGN( _allocator, _size, _align ) ( _allocator )->Malign( ( _size ), ( _align ), __FILE__, __LINE__ )
-
-
-
-
-
-
-
-
-
- #define AK_PLUGIN_REALLOC( _allocator, _pmem, _size ) ( _allocator )->Realloc( ( _pmem ), ( _size ), __FILE__, __LINE__ )
-
-
-
-
-
-
-
-
-
-
- #define AK_PLUGIN_REALLOC_ALIGN( _allocator, _pmem, _size, _align ) ( _allocator )->ReallocAligned( ( _pmem ), ( _size ), ( _align ), __FILE__, __LINE__ )
- template <class T>
- AkForceInline void AK_PLUGIN_DELETE( AK::IAkPluginMemAlloc * in_pAllocator, T * in_pObject )
- {
- if ( in_pObject )
- {
- in_pObject->~T();
- in_pAllocator->Free( in_pObject );
- }
- }
- #define AK_PLUGIN_FREE( _allocator, _pvmem ) ( _allocator )->Free( ( _pvmem ) )
- class AkPluginArrayAllocator
- {
- public:
- AkForceInline AkPluginArrayAllocator() : m_pAllocator(NULL) {}
- AkForceInline void Init(AK::IAkPluginMemAlloc* in_pAllocator) { m_pAllocator = in_pAllocator; }
- protected:
- AkForceInline void* Alloc(size_t in_uSize) { return AK_PLUGIN_ALLOC(m_pAllocator, in_uSize); }
- AkForceInline void* ReAlloc(void* in_pCurrent, size_t in_uOldSize, size_t in_uNewSize) { return AK_PLUGIN_REALLOC(m_pAllocator, in_pCurrent, in_uNewSize); }
- AkForceInline void Free(void* in_pAddress) { AK_PLUGIN_FREE(m_pAllocator, in_pAddress); }
- AkForceInline void TransferMem(void*& io_pDest, AkPluginArrayAllocator& in_src, void* in_pSrc)
- {
-
- io_pDest = in_pSrc;
- m_pAllocator = in_src.GetAllocator();
- }
- AkForceInline AK::IAkPluginMemAlloc* GetAllocator() { return m_pAllocator; }
- private:
- AK::IAkPluginMemAlloc* m_pAllocator;
- };
- #endif
|