xref: /aosp_15_r20/external/lzma/CPP/Windows/Handle.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Windows/Handle.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_WINDOWS_HANDLE_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_WINDOWS_HANDLE_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 
10*f6dc9357SAndroid Build Coastguard Worker class CHandle  MY_UNCOPYABLE
11*f6dc9357SAndroid Build Coastguard Worker {
12*f6dc9357SAndroid Build Coastguard Worker protected:
13*f6dc9357SAndroid Build Coastguard Worker   HANDLE _handle;
14*f6dc9357SAndroid Build Coastguard Worker public:
HANDLE()15*f6dc9357SAndroid Build Coastguard Worker   operator HANDLE() { return _handle; }
CHandle()16*f6dc9357SAndroid Build Coastguard Worker   CHandle(): _handle(NULL) {}
~CHandle()17*f6dc9357SAndroid Build Coastguard Worker   ~CHandle() { Close(); }
IsCreated()18*f6dc9357SAndroid Build Coastguard Worker   bool IsCreated() const { return (_handle != NULL); }
Close()19*f6dc9357SAndroid Build Coastguard Worker   bool Close()
20*f6dc9357SAndroid Build Coastguard Worker   {
21*f6dc9357SAndroid Build Coastguard Worker     if (_handle == NULL)
22*f6dc9357SAndroid Build Coastguard Worker       return true;
23*f6dc9357SAndroid Build Coastguard Worker     if (!::CloseHandle(_handle))
24*f6dc9357SAndroid Build Coastguard Worker       return false;
25*f6dc9357SAndroid Build Coastguard Worker     _handle = NULL;
26*f6dc9357SAndroid Build Coastguard Worker     return true;
27*f6dc9357SAndroid Build Coastguard Worker   }
Attach(HANDLE handle)28*f6dc9357SAndroid Build Coastguard Worker   void Attach(HANDLE handle) { _handle = handle; }
Detach()29*f6dc9357SAndroid Build Coastguard Worker   HANDLE Detach()
30*f6dc9357SAndroid Build Coastguard Worker   {
31*f6dc9357SAndroid Build Coastguard Worker     const HANDLE handle = _handle;
32*f6dc9357SAndroid Build Coastguard Worker     _handle = NULL;
33*f6dc9357SAndroid Build Coastguard Worker     return handle;
34*f6dc9357SAndroid Build Coastguard Worker   }
35*f6dc9357SAndroid Build Coastguard Worker };
36*f6dc9357SAndroid Build Coastguard Worker 
37*f6dc9357SAndroid Build Coastguard Worker }
38*f6dc9357SAndroid Build Coastguard Worker 
39*f6dc9357SAndroid Build Coastguard Worker #endif
40