blob: c099c17e7e1423d3872997ddb73da9c895cb5b9b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#ifndef fd_hh_INCLUDED
#define fd_hh_INCLUDED
namespace Kakoune
{
template<auto close_fn>
struct UniqueDescriptor
{
UniqueDescriptor(int descriptor = -1) : descriptor{descriptor} {}
UniqueDescriptor(UniqueDescriptor&& other) : descriptor{other.descriptor} { other.descriptor = -1; }
UniqueDescriptor& operator=(UniqueDescriptor&& other) { std::swap(descriptor, other.descriptor); other.close(); return *this; }
~UniqueDescriptor() { close(); }
explicit operator int() const { return descriptor; }
explicit operator bool() const { return descriptor != -1; }
void close() { if (descriptor != -1) { close_fn(descriptor); descriptor = -1; } }
int descriptor;
};
}
#endif // fd_hh_INCLUDED
|