Foundation
Loading...
Searching...
No Matches
MemoryMapped.hpp
Go to the documentation of this file.
1#pragma once
2#include <Core/Container.hpp>
3#include <cstdint>
4#include <limits>
5
6namespace Foundation::Core {
7
9{
12};
13
15{
16 void* mData{};
17 uint64_t mSize{};
18 bool mWritable{};
19
20#if defined(_WIN32)
21 void* mFileHandle{};
22 void* mMappingHandle{};
23#else
24 int mFd{-1};
25#endif
26
27 void MapView();
28 void UnmapView() noexcept;
29 void MoveFrom(MemoryMappedFile& other) noexcept;
30
31public:
32 MemoryMappedFile() = default;
34 MemoryMappedFile(StringView path, uint64_t size);
36
38 MemoryMappedFile& operator=(MemoryMappedFile const&) = delete;
39
40 MemoryMappedFile(MemoryMappedFile&& other) noexcept;
41 MemoryMappedFile& operator=(MemoryMappedFile&& other) noexcept;
42
43 void Open(StringView path, MemoryMappedAccess access);
44 void Create(StringView path, uint64_t size);
45 void OpenOrCreate(StringView path, uint64_t size);
46 void Resize(uint64_t size);
47 void Flush(uint64_t offset = 0, uint64_t size = std::numeric_limits<uint64_t>::max()) const;
48 void Close() noexcept;
49
50 [[nodiscard]] bool IsOpen() const noexcept;
51 [[nodiscard]] bool IsMapped() const noexcept { return mData != nullptr; }
52 [[nodiscard]] bool IsWritable() const noexcept { return mWritable; }
53 [[nodiscard]] bool Empty() const noexcept { return mSize == 0; }
54 [[nodiscard]] uint64_t Size() const noexcept { return mSize; }
55
56 [[nodiscard]] const unsigned char* Data() const noexcept { return static_cast<const unsigned char*>(mData); }
57 [[nodiscard]] unsigned char* MutableData();
58 [[nodiscard]] Span<const unsigned char> Bytes() const;
59 [[nodiscard]] Span<unsigned char> MutableBytes();
60};
61
62} // namespace Foundation::Core
Definition MemoryMapped.hpp:15
bool IsWritable() const noexcept
Definition MemoryMapped.hpp:52
bool IsMapped() const noexcept
Definition MemoryMapped.hpp:51
bool IsOpen() const noexcept
Definition MemoryMapped.cpp:403
unsigned char * MutableData()
Definition MemoryMapped.cpp:412
void Resize(uint64_t size)
Definition MemoryMapped.cpp:292
void Open(StringView path, MemoryMappedAccess access)
Definition MemoryMapped.cpp:169
bool mWritable
Definition MemoryMapped.hpp:18
Span< const unsigned char > Bytes() const
Definition MemoryMapped.cpp:418
void OpenOrCreate(StringView path, uint64_t size)
Definition MemoryMapped.cpp:248
bool Empty() const noexcept
Definition MemoryMapped.hpp:53
void MapView()
Definition MemoryMapped.cpp:312
uint64_t mSize
Definition MemoryMapped.hpp:17
void MoveFrom(MemoryMappedFile &other) noexcept
Definition MemoryMapped.cpp:148
uint64_t Size() const noexcept
Definition MemoryMapped.hpp:54
void Create(StringView path, uint64_t size)
Definition MemoryMapped.cpp:209
void UnmapView() noexcept
Definition MemoryMapped.cpp:335
Span< unsigned char > MutableBytes()
Definition MemoryMapped.cpp:423
void * mData
Definition MemoryMapped.hpp:16
const unsigned char * Data() const noexcept
Definition MemoryMapped.hpp:56
int mFd
Definition MemoryMapped.hpp:24
void Flush(uint64_t offset=0, uint64_t size=std::numeric_limits< uint64_t >::max()) const
Definition MemoryMapped.cpp:357
void Close() noexcept
Definition MemoryMapped.cpp:383
Lock-free atomic primitives and implementations of data structures.
Definition Allocator.hpp:5
MemoryMappedAccess
Definition MemoryMapped.hpp:9
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:55
std::span< T > Span
Alias for std::span
Definition Container.hpp:60