#ifndef __Allocator_H #define __Allocator_H /* * Class: * * WmiAllocator * * Description: * * Provides abstraction above heap allocation functions * * Version: * * Initial * * Last Changed: * * See Source Depot for change history * */ enum WmiStatusCode { e_StatusCode_Success = 0 , e_StatusCode_Success_Timeout , e_StatusCode_EnQueue, e_StatusCode_OutOfMemory = 0x80000000 , e_StatusCode_OutOfResources , e_StatusCode_NotInitialized , e_StatusCode_AlreadyInitialized , e_StatusCode_InvalidArgs , e_StatusCode_OutOfBounds , e_StatusCode_OutOfQuota , e_StatusCode_Unknown , e_StatusCode_NotFound , e_StatusCode_AlreadyExists , e_StatusCode_Failed , e_StatusCode_ServicingThreadTerminated , e_StatusCode_HostingThreadTerminated , e_StatusCode_Change , e_StatusCode_InvalidHeap } ; /* * Class: * * WmiAllocator * * Description: * * Provides abstraction above heap allocation functions * * Version: * * Initial * * Last Changed: * * See Source Depot for change history * */ #ifndef __PLACEMENT_NEW_INLINE #define __PLACEMENT_NEW_INLINE inline void *__cdecl operator new ( size_t a_Size , void *a_Ptr ) { return a_Ptr ; } inline void __cdecl operator delete ( void * , void * ) { ; } #endif /* * Class: * * WmiAllocator * * Description: * * Provides abstraction above heap allocation functions * * Version: * * Initial * * Last Changed: * * See Source Depot for change history * */ class WmiAllocator { public: enum AllocationOptions { e_GenerateException = HEAP_GENERATE_EXCEPTIONS , e_NoSerialize = HEAP_NO_SERIALIZE , e_ZeroMemory = HEAP_ZERO_MEMORY , e_ReallocInPlace = HEAP_REALLOC_IN_PLACE_ONLY , e_DefaultAllocation = 0 } ; private: LONG m_ReferenceCount ; HANDLE m_Heap ; AllocationOptions m_Options ; size_t m_InitialSize ; size_t m_MaximumSize ; WmiStatusCode Win32ToApi () ; public: WmiAllocator () ; WmiAllocator ( AllocationOptions a_Option , size_t a_InitialSize , size_t a_MaximumSize ) ; ~WmiAllocator () ; ULONG AddRef () ; ULONG Release () ; WmiStatusCode Initialize () ; WmiStatusCode UnInitialize () ; WmiStatusCode New ( void **a_Allocation , size_t a_Size ) ; WmiStatusCode New ( AllocationOptions a_Option , void **a_Allocation , size_t a_Size ) ; WmiStatusCode ReAlloc ( void *a_Allocation , void **a_ReAllocation , size_t a_Size ) ; WmiStatusCode ReAlloc ( AllocationOptions a_Option , void *a_Allocation , void **a_ReAllocation , size_t a_Size ) ; WmiStatusCode Delete ( void *a_Allocation ) ; WmiStatusCode Size ( void *a_Allocation , size_t &a_Size ) ; WmiStatusCode Compact ( size_t &a_LargestFreeBlock ) ; WmiStatusCode Validate ( LPCVOID a_Location = NULL ) ; } ; #endif // __Allocator_H