|
1
|
1 #pragma once
|
|
|
2
|
|
|
3 namespace pfc {
|
|
|
4 #ifdef _WIN32
|
|
|
5 typedef HANDLE fileHandle_t;
|
|
|
6 const fileHandle_t fileHandleInvalid = INVALID_HANDLE_VALUE;
|
|
|
7 #else
|
|
|
8 typedef int fileHandle_t;
|
|
|
9 constexpr fileHandle_t fileHandleInvalid = -1;
|
|
|
10 #endif
|
|
|
11
|
|
|
12 void fileHandleClose( fileHandle_t h ) noexcept;
|
|
|
13 fileHandle_t fileHandleDup( fileHandle_t h );
|
|
|
14
|
|
|
15 class fileHandle {
|
|
|
16 public:
|
|
|
17 fileHandle( fileHandle_t val ) : h(val) {}
|
|
|
18 fileHandle() : h ( fileHandleInvalid ) {}
|
|
|
19 ~fileHandle() noexcept { close(); }
|
|
|
20 fileHandle( fileHandle && other ) noexcept { h = other.h; other.clear(); }
|
|
|
21 void operator=( fileHandle && other ) noexcept { close(); h = other.h; other.clear(); }
|
|
|
22 void operator=( fileHandle_t other ) { close(); h = other; }
|
|
|
23 void close() noexcept;
|
|
|
24 void clear() noexcept { h = fileHandleInvalid; }
|
|
|
25 bool isValid() noexcept { return h != fileHandleInvalid; }
|
|
|
26 fileHandle_t h;
|
|
|
27 private:
|
|
|
28 fileHandle( const fileHandle & ) = delete;
|
|
|
29 void operator=( const fileHandle & ) = delete;
|
|
|
30 };
|
|
|
31 }
|