xref: /aosp_15_r20/external/lzma/CPP/Windows/MemoryGlobal.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Windows/MemoryGlobal.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_WINDOWS_MEMORY_GLOBAL_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_WINDOWS_MEMORY_GLOBAL_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../Common/MyWindows.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker namespace NWindows {
9*f6dc9357SAndroid Build Coastguard Worker namespace NMemory {
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker class CGlobal
12*f6dc9357SAndroid Build Coastguard Worker {
13*f6dc9357SAndroid Build Coastguard Worker   HGLOBAL _global;
14*f6dc9357SAndroid Build Coastguard Worker public:
CGlobal()15*f6dc9357SAndroid Build Coastguard Worker   CGlobal(): _global(NULL) {}
~CGlobal()16*f6dc9357SAndroid Build Coastguard Worker   ~CGlobal() { Free(); }
HGLOBAL()17*f6dc9357SAndroid Build Coastguard Worker   operator HGLOBAL() const { return _global; }
Attach(HGLOBAL hGlobal)18*f6dc9357SAndroid Build Coastguard Worker   void Attach(HGLOBAL hGlobal)
19*f6dc9357SAndroid Build Coastguard Worker   {
20*f6dc9357SAndroid Build Coastguard Worker     Free();
21*f6dc9357SAndroid Build Coastguard Worker     _global = hGlobal;
22*f6dc9357SAndroid Build Coastguard Worker   }
Detach()23*f6dc9357SAndroid Build Coastguard Worker   HGLOBAL Detach()
24*f6dc9357SAndroid Build Coastguard Worker   {
25*f6dc9357SAndroid Build Coastguard Worker     const HGLOBAL h = _global;
26*f6dc9357SAndroid Build Coastguard Worker     _global = NULL;
27*f6dc9357SAndroid Build Coastguard Worker     return h;
28*f6dc9357SAndroid Build Coastguard Worker   }
29*f6dc9357SAndroid Build Coastguard Worker   bool Alloc(UINT flags, SIZE_T size) throw();
30*f6dc9357SAndroid Build Coastguard Worker   bool Free() throw();
Lock()31*f6dc9357SAndroid Build Coastguard Worker   LPVOID Lock() const { return GlobalLock(_global); }
Unlock()32*f6dc9357SAndroid Build Coastguard Worker   void Unlock() const { GlobalUnlock(_global); }
33*f6dc9357SAndroid Build Coastguard Worker   bool ReAlloc(SIZE_T size) throw();
34*f6dc9357SAndroid Build Coastguard Worker };
35*f6dc9357SAndroid Build Coastguard Worker 
36*f6dc9357SAndroid Build Coastguard Worker class CGlobalLock
37*f6dc9357SAndroid Build Coastguard Worker {
38*f6dc9357SAndroid Build Coastguard Worker   HGLOBAL _global;
39*f6dc9357SAndroid Build Coastguard Worker   LPVOID _ptr;
40*f6dc9357SAndroid Build Coastguard Worker public:
GetPointer()41*f6dc9357SAndroid Build Coastguard Worker   LPVOID GetPointer() const { return _ptr; }
CGlobalLock(HGLOBAL hGlobal)42*f6dc9357SAndroid Build Coastguard Worker   CGlobalLock(HGLOBAL hGlobal): _global(hGlobal)
43*f6dc9357SAndroid Build Coastguard Worker   {
44*f6dc9357SAndroid Build Coastguard Worker     _ptr = GlobalLock(hGlobal);
45*f6dc9357SAndroid Build Coastguard Worker   }
~CGlobalLock()46*f6dc9357SAndroid Build Coastguard Worker   ~CGlobalLock()
47*f6dc9357SAndroid Build Coastguard Worker   {
48*f6dc9357SAndroid Build Coastguard Worker     if (_ptr)
49*f6dc9357SAndroid Build Coastguard Worker       GlobalUnlock(_global);
50*f6dc9357SAndroid Build Coastguard Worker   }
51*f6dc9357SAndroid Build Coastguard Worker };
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker }}
54*f6dc9357SAndroid Build Coastguard Worker 
55*f6dc9357SAndroid Build Coastguard Worker #endif
56