Cogs.Core
FileHandle.h
1#pragma once
2
3#if !defined( EMSCRIPTEN )
4
5#include "../StringView.h"
6
7#if defined( _WIN32 )
8#include <WinSock2.h>
9#undef GetObject
10#endif
11
12#include <memory>
13
14namespace Cogs {
15 class COGSFOUNDATION_API FileHandle {
16 public:
17 using Ptr = std::shared_ptr<FileHandle>;
18
19 enum class OpenMode {
20 Create,
21 CreateAlways,
22 Open,
23 OpenAlways
24 };
25
26 enum class AccessMode {
27 Read,
28 Write
29 };
30
31 enum class ProtectionMode {
32 ReadOnly,
33 };
34
35 FileHandle() = default;
37 FileHandle(const FileHandle &) = delete;
38 FileHandle(FileHandle &&move) noexcept
39 {
40 assert(move.mappedMemory == nullptr);
41#if defined( _WIN32 )
42 fileHandle = move.fileHandle;
43 move.fileHandle = INVALID_HANDLE_VALUE;
44#elif defined( __linux__ ) || defined(__APPLE__)
45 fileDescriptor = move.fileDescriptor;
46 move.fileDescriptor = -1;
47#endif
48 }
49 FileHandle &operator=(const FileHandle &) = delete;
50 FileHandle &operator=(FileHandle &&move) noexcept
51 {
52 assert(mappedMemory == nullptr);
53 assert(move.mappedMemory == nullptr);
54 close();
55#if defined( _WIN32 )
56 fileHandle = move.fileHandle;
57 move.fileHandle = INVALID_HANDLE_VALUE;
58#elif defined( __linux__ ) || defined(__APPLE__)
59 fileDescriptor = move.fileDescriptor;
60 move.fileDescriptor = -1;
61#endif
62 return *this;
63 }
64
65 static Ptr open(std::string_view path, OpenMode openMode, AccessMode accessMode);
66 void close();
67
68 size_t getSize() const;
69 void* getMappedMemory() const { return mappedMemory; }
70
71 bool isOpen() const;
72 bool isMapped() const { return mappedMemory != nullptr; }
73
74 bool write(const void *buffer, size_t size, size_t &written);
75 bool read(void *buffer, size_t size, size_t &read);
76
77 void* map(ProtectionMode protectionMode, size_t offset, size_t size);
78 void unmap();
79
80 private:
81#if defined( _WIN32 )
82 HANDLE fileHandle = INVALID_HANDLE_VALUE;
83 HANDLE mapHandle = nullptr;
84#elif defined( __linux__ ) || defined(__APPLE__)
85 int fileDescriptor = -1;
86 size_t mappedSize = 0;
87#endif
88 void* mappedMemory = nullptr;
89 };
90}
91
92#endif // !EMSCRIPTEN
Contains all Cogs related functionality.
Definition: FieldSetter.h:23