mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
[ATL]
- 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:
parent
d064fe61ec
commit
b0451457d7
1 changed files with 102 additions and 0 deletions
102
reactos/lib/atl/atlmem.h
Normal file
102
reactos/lib/atl/atlmem.h
Normal 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
|
Loading…
Reference in a new issue