Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/Windows/Memory.cpp')
-rwxr-xr-xCPP/Windows/Memory.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/CPP/Windows/Memory.cpp b/CPP/Windows/Memory.cpp
new file mode 100755
index 00000000..435ea999
--- /dev/null
+++ b/CPP/Windows/Memory.cpp
@@ -0,0 +1,64 @@
+// Windows/Memory.cpp
+
+#include "StdAfx.h"
+
+#include "Windows/Memory.h"
+
+namespace NWindows {
+namespace NMemory {
+
+CGlobal::~CGlobal()
+{
+ Free();
+}
+
+bool CGlobal::Alloc(UINT flags, SIZE_T size)
+{
+ HGLOBAL newBlock = ::GlobalAlloc(flags, size);
+ if (newBlock == NULL)
+ return false;
+ m_MemoryHandle = newBlock;
+ return true;
+}
+
+bool CGlobal::Free()
+{
+ if (m_MemoryHandle == NULL)
+ return true;
+ m_MemoryHandle = ::GlobalFree(m_MemoryHandle);
+ return (m_MemoryHandle == NULL);
+}
+
+void CGlobal::Attach(HGLOBAL hGlobal)
+{
+ Free();
+ m_MemoryHandle = hGlobal;
+}
+
+HGLOBAL CGlobal::Detach()
+{
+ HGLOBAL h = m_MemoryHandle;
+ m_MemoryHandle = NULL;
+ return h;
+}
+
+LPVOID CGlobal::Lock() const
+{
+ return ::GlobalLock(m_MemoryHandle);
+}
+
+void CGlobal::Unlock() const
+{
+ ::GlobalUnlock(m_MemoryHandle);
+}
+
+bool CGlobal::ReAlloc(SIZE_T size)
+{
+ HGLOBAL newBlock = ::GlobalReAlloc(m_MemoryHandle, size, GMEM_MOVEABLE);
+ if (newBlock == NULL)
+ return false;
+ m_MemoryHandle = newBlock;
+ return true;
+}
+
+}}