HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
file_view.hpp
1// Copyright Take Vos 2019, 2021-2022.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "file_mapping.hpp"
8#include "resource_view.hpp"
9#include "void_span.hpp"
10#include "URI.hpp"
11#include <span>
12
13hi_warning_push();
14// C26490: Don't use reinterpret_cast (type.1).
15// We need to convert bytes to chars to get a string_view from the byte buffer.
16hi_warning_ignore_msvc(26490);
17
18namespace hi::inline v1 {
19
23public:
24 ~file_view() = default;
25 file_view() = delete;
26 file_view(file_view const& other) noexcept;
27 file_view(file_view&& other) noexcept;
28 file_view& operator=(file_view const& other) noexcept;
29 file_view& operator=(file_view&& other) noexcept;
30
31 file_view(std::shared_ptr<file_mapping> const& mappingObject, std::size_t offset, std::size_t size);
32
34 std::filesystem::path const& path,
35 access_mode access_mode = access_mode::open_for_read,
36 std::size_t offset = 0,
37 std::size_t size = 0);
38
40 URL path,
41 access_mode access_mode = access_mode::open_for_read,
42 std::size_t offset = 0,
43 std::size_t size = 0) :
44 file_view(path.filesystem_path(), access_mode, offset, size)
45 {
46 }
47
49 std::string_view path,
50 access_mode access_mode = access_mode::open_for_read,
51 std::size_t offset = 0,
52 std::size_t size = 0) :
53 file_view(std::filesystem::path{path}, access_mode, offset, size)
54 {
55 }
56
58 std::string const& path,
59 access_mode access_mode = access_mode::open_for_read,
60 std::size_t offset = 0,
61 std::size_t size = 0) :
62 file_view(std::filesystem::path{path}, access_mode, offset, size)
63 {
64 }
65
67 char const *path,
68 access_mode access_mode = access_mode::open_for_read,
69 std::size_t offset = 0,
70 std::size_t size = 0) :
71 file_view(std::filesystem::path{path}, access_mode, offset, size)
72 {
73 }
74
77 [[nodiscard]] access_mode accessMode() const noexcept
78 {
79 return _file_mapping_object->accessMode();
80 }
81
84 [[nodiscard]] std::filesystem::path const& path() const noexcept
85 {
86 return _file_mapping_object->path();
87 }
88
91 [[nodiscard]] std::size_t offset() const noexcept override
92 {
93 return _offset;
94 }
95
98 [[nodiscard]] void_span writable_span() noexcept override
99 {
100 return *_bytes;
101 }
102
105 [[nodiscard]] const_void_span span() const noexcept override
106 {
107 return *_bytes;
108 }
109
114 void flush(void *base, std::size_t size);
115
119 [[nodiscard]] static std::unique_ptr<resource_view> load_view(std::filesystem::path const& path)
120 {
121 return std::make_unique<file_view>(path);
122 }
123
124private:
131 static void unmap(void_span *bytes) noexcept;
132
142 [[nodiscard]] static std::shared_ptr<file_mapping>
143 findOrCreateFileMappingObject(std::filesystem::path const& path, access_mode access_mode, std::size_t size);
144
145private:
148 std::shared_ptr<file_mapping> _file_mapping_object;
149
155
158 std::size_t _offset;
159};
160
161} // namespace hi::inline v1
162
163hi_warning_pop();
DOXYGEN BUG.
Definition algorithm.hpp:15
access_mode
Definition file.hpp:20
Definition file_view.hpp:22
void_span writable_span() noexcept override
Definition file_view.hpp:98
access_mode accessMode() const noexcept
Definition file_view.hpp:77
static std::unique_ptr< resource_view > load_view(std::filesystem::path const &path)
Definition file_view.hpp:119
std::filesystem::path const & path() const noexcept
Definition file_view.hpp:84
void flush(void *base, std::size_t size)
Flush changes in memory to the open file.
const_void_span span() const noexcept override
Definition file_view.hpp:105
std::size_t offset() const noexcept override
Definition file_view.hpp:91
Definition resource_view.hpp:39
Definition void_span.hpp:19
Definition void_span.hpp:156