Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / Windows / Handle.h
1 // Windows/Handle.h\r
2 \r
3 #ifndef __WINDOWS_HANDLE_H\r
4 #define __WINDOWS_HANDLE_H\r
5 \r
6 namespace NWindows {\r
7 \r
8 class CHandle\r
9 {\r
10 protected:\r
11   HANDLE _handle;\r
12 public:\r
13   operator HANDLE() { return _handle; }\r
14   CHandle(): _handle(NULL) {}\r
15   ~CHandle() { Close(); }\r
16   bool IsCreated() const { return (_handle != NULL); }\r
17   bool Close()\r
18   {\r
19     if (_handle == NULL)\r
20       return true;\r
21     if (!::CloseHandle(_handle))\r
22       return false;\r
23     _handle = NULL;\r
24     return true;\r
25   }\r
26   void Attach(HANDLE handle) { _handle = handle; }\r
27   HANDLE Detach()\r
28   {\r
29     HANDLE handle = _handle;\r
30     _handle = NULL;\r
31     return handle;\r
32   }\r
33 };\r
34 \r
35 }\r
36 \r
37 #endif\r