- Add the IAtlMemMgr interface
- Add a basic implementation of CWin32Heap which just implements the base IAtlMemMgr
- Required for CAtlString / CAtlStringMgr (coming later)

svn path=/trunk/; revision=68381
This commit is contained in:
Ged Murphy 2015-07-09 08:18:24 +00:00
parent d064fe61ec
commit b0451457d7

102
reactos/lib/atl/atlmem.h Normal file
View file

@ -0,0 +1,102 @@
#ifndef __ATLMEM_H__
#define __ATLMEM_H__
#pragma once
#include <atlcore.h>
namespace ATL
{
__interface __declspec(uuid("654F7EF5-CFDF-4df9-A450-6C6A13C622C0")) IAtlMemMgr
{
public:
_Ret_maybenull_ _Post_writable_byte_size_(SizeBytes) void* Allocate(
_In_ size_t SizeBytes
);
void Free(
_Inout_opt_ void* Buffer
);
_Ret_maybenull_ _Post_writable_byte_size_(SizeBytes) void* Reallocate(
_Inout_updates_bytes_opt_(SizeBytes) void* Buffer,
_In_ size_t SizeBytes
);
size_t GetSize(
_In_ void* Buffer
);
};
class CWin32Heap : public IAtlMemMgr
{
public:
HANDLE m_hHeap;
public:
CWin32Heap() :
m_hHeap(NULL)
{
}
CWin32Heap(_In_ HANDLE hHeap) :
m_hHeap(hHeap)
{
ATLASSERT(hHeap != NULL);
}
virtual ~CWin32Heap()
{
}
// IAtlMemMgr
_Ret_maybenull_ _Post_writable_byte_size_(SizeBytes) virtual void* Allocate(
_In_ size_t SizeBytes
)
{
return ::HeapAlloc(m_hHeap, 0, SizeBytes);
}
virtual void Free(
_In_opt_ void* Buffer
)
{
if (Buffer)
{
BOOL FreeOk;
FreeOk = ::HeapFree(m_hHeap, 0, Buffer);
ATLASSERT(FreeOk == TRUE);
}
}
_Ret_maybenull_ _Post_writable_byte_size_(SizeBytes) virtual void* Reallocate(
_In_opt_ void* Buffer,
_In_ size_t SizeBytes
)
{
if (SizeBytes == 0)
{
Free(Buffer);
return NULL;
}
if (Buffer == NULL)
{
return Allocate(SizeBytes);
}
return ::HeapReAlloc(m_hHeap, 0, Buffer, SizeBytes);
}
virtual size_t GetSize(
_Inout_ void* Buffer
)
{
return ::HeapSize(m_hHeap, 0, Buffer);
}
};
}
#endif