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 tt {
12
15class file_view : public resource_view {
16public:
17 file_view(std::shared_ptr<file_mapping> const& mappingObject, size_t offset, size_t size);
18 file_view(URL const &location, access_mode accessMode=access_mode::open_for_read, size_t offset=0, 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 { return _file_mapping_object->accessMode(); }
30
33 [[nodiscard]] URL const &location() const noexcept { return _file_mapping_object->location(); }
34
37 [[nodiscard]] size_t offset() const noexcept override { return _offset; }
38
41 [[nodiscard]] size_t size() const noexcept override { return _bytes->size(); }
42
45 [[nodiscard]] std::byte *data() noexcept { return _bytes->data(); }
46
49 [[nodiscard]] std::byte const *data() const noexcept override { return _bytes->data(); }
50
53 [[nodiscard]] std::span<std::byte> bytes() noexcept { return *_bytes; }
54
57 [[nodiscard]] std::span<std::byte const> bytes() const noexcept override { return *_bytes; }
58
61 [[nodiscard]] std::string_view string_view() noexcept {
62 return std::string_view{reinterpret_cast<char *>(data()), size()};
63 }
64
67 [[nodiscard]] std::string_view string_view() const noexcept override {
68 return std::string_view{reinterpret_cast<char const *>(data()), size()};
69 }
70
75 void flush(void* base, size_t size);
76
80 [[nodiscard]] static std::unique_ptr<resource_view> loadView(URL const &location) {
81 return std::make_unique<file_view>(location);
82 }
83
84private:
91 static void unmap(std::span<std::byte> *bytes) noexcept;
92
102 [[nodiscard]] static std::shared_ptr<file_mapping> findOrCreateFileMappingObject(URL const& path, access_mode accessMode, size_t size);
103
104private:
107 std::shared_ptr<file_mapping> _file_mapping_object;
108
114
117 size_t _offset;
118
119};
120
121}
Definition file_view.hpp:15
URL const & location() const noexcept
Definition file_view.hpp:33
std::string_view string_view() const noexcept override
Definition file_view.hpp:67
std::byte * data() noexcept
Definition file_view.hpp:45
std::string_view string_view() noexcept
Definition file_view.hpp:61
static std::unique_ptr< resource_view > loadView(URL const &location)
Definition file_view.hpp:80
size_t size() const noexcept override
Definition file_view.hpp:41
std::span< std::byte const > bytes() const noexcept override
Definition file_view.hpp:57
size_t offset() const noexcept override
Definition file_view.hpp:37
access_mode accessMode() const noexcept
Definition file_view.hpp:29
std::span< std::byte > bytes() noexcept
Definition file_view.hpp:53
std::byte const * data() const noexcept override
Definition file_view.hpp:49
void flush(void *base, size_t size)
Flush changes in memory to the open file.
A read-only memory mapping of a resource.
Definition resource_view.hpp:18
Definition URL.hpp:46