HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
file_view.hpp
1// Copyright Take Vos 2019, 2021.
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 <span>
10
11namespace hi::inline v1 {
12
15class file_view : public resource_view {
16public:
17 file_view(std::shared_ptr<file_mapping> const &mappingObject, std::size_t offset, std::size_t size);
18 file_view(URL const &location, access_mode accessMode = access_mode::open_for_read, std::size_t offset = 0, std::size_t size = 0);
19 ~file_view() = default;
20
21 file_view() = delete;
22 file_view(file_view const &other) noexcept;
23 file_view(file_view &&other) noexcept;
24 file_view &operator=(file_view const &other) noexcept;
25 file_view &operator=(file_view &&other) noexcept;
26
29 [[nodiscard]] access_mode accessMode() const noexcept
30 {
31 return _file_mapping_object->accessMode();
32 }
33
36 [[nodiscard]] URL const &location() const noexcept
37 {
38 return _file_mapping_object->location();
39 }
40
43 [[nodiscard]] std::size_t offset() const noexcept override
44 {
45 return _offset;
46 }
47
50 [[nodiscard]] std::size_t size() const noexcept override
51 {
52 return _bytes->size();
53 }
54
57 [[nodiscard]] std::byte *data() noexcept
58 {
59 return _bytes->data();
60 }
61
64 [[nodiscard]] std::byte const *data() const noexcept override
65 {
66 return _bytes->data();
67 }
68
71 [[nodiscard]] std::span<std::byte> bytes() noexcept
72 {
73 return *_bytes;
74 }
75
78 [[nodiscard]] std::span<std::byte const> bytes() const noexcept override
79 {
80 return *_bytes;
81 }
82
85 [[nodiscard]] std::string_view string_view() noexcept
86 {
87 return std::string_view{reinterpret_cast<char *>(data()), size()};
88 }
89
92 [[nodiscard]] std::string_view string_view() const noexcept override
93 {
94 return std::string_view{reinterpret_cast<char const *>(data()), size()};
95 }
96
101 void flush(void *base, std::size_t size);
102
106 [[nodiscard]] static std::unique_ptr<resource_view> loadView(URL const &location)
107 {
108 return std::make_unique<file_view>(location);
109 }
110
111private:
118 static void unmap(std::span<std::byte> *bytes) noexcept;
119
129 [[nodiscard]] static std::shared_ptr<file_mapping>
130 findOrCreateFileMappingObject(URL const &path, access_mode accessMode, std::size_t size);
131
132private:
135 std::shared_ptr<file_mapping> _file_mapping_object;
136
142
145 std::size_t _offset;
146};
147
148} // namespace hi::inline v1
Definition file_view.hpp:15
static std::unique_ptr< resource_view > loadView(URL const &location)
Definition file_view.hpp:106
std::size_t size() const noexcept override
Definition file_view.hpp:50
std::string_view string_view() noexcept
Definition file_view.hpp:85
access_mode accessMode() const noexcept
Definition file_view.hpp:29
std::byte * data() noexcept
Definition file_view.hpp:57
std::string_view string_view() const noexcept override
Definition file_view.hpp:92
void flush(void *base, std::size_t size)
Flush changes in memory to the open file.
std::byte const * data() const noexcept override
Definition file_view.hpp:64
std::span< std::byte > bytes() noexcept
Definition file_view.hpp:71
std::size_t offset() const noexcept override
Definition file_view.hpp:43
URL const & location() const noexcept
Definition file_view.hpp:36
std::span< std::byte const > bytes() const noexcept override
Definition file_view.hpp:78
A read-only memory mapping of a resource.
Definition resource_view.hpp:18
Definition URL.hpp:47