Author: gedmurphy
Date: Thu Jul 9 08:18:24 2015
New Revision: 68381
URL:
http://svn.reactos.org/svn/reactos?rev=68381&view=rev
Log:
[ATL]
- Add the IAtlMemMgr interface
- Add a basic implementation of CWin32Heap which just implements the base IAtlMemMgr
- Required for CAtlString / CAtlStringMgr (coming later)
Added:
trunk/reactos/lib/atl/atlmem.h (with props)
Added: trunk/reactos/lib/atl/atlmem.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/atl/atlmem.h?rev=68381
==============================================================================
--- trunk/reactos/lib/atl/atlmem.h (added)
+++ trunk/reactos/lib/atl/atlmem.h [iso-8859-1] Thu Jul 9 08:18:24 2015
@@ -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
Propchange: trunk/reactos/lib/atl/atlmem.h
------------------------------------------------------------------------------
svn:eol-style = native