xref: /third_party/lzma/CPP/Windows/Handle.h (revision 370b324c)
1// Windows/Handle.h
2
3#ifndef ZIP7_INC_WINDOWS_HANDLE_H
4#define ZIP7_INC_WINDOWS_HANDLE_H
5
6#include "../Common/MyWindows.h"
7
8namespace NWindows {
9
10class CHandle  MY_UNCOPYABLE
11{
12protected:
13  HANDLE _handle;
14public:
15  operator HANDLE() { return _handle; }
16  CHandle(): _handle(NULL) {}
17  ~CHandle() { Close(); }
18  bool IsCreated() const { return (_handle != NULL); }
19  bool Close()
20  {
21    if (_handle == NULL)
22      return true;
23    if (!::CloseHandle(_handle))
24      return false;
25    _handle = NULL;
26    return true;
27  }
28  void Attach(HANDLE handle) { _handle = handle; }
29  HANDLE Detach()
30  {
31    const HANDLE handle = _handle;
32    _handle = NULL;
33    return handle;
34  }
35};
36
37}
38
39#endif
40