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