HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
FileView.hpp
1// Copyright 2019 Pokitec
2// All rights reserved.
3
4#pragma once
5
6#include "TTauri/Foundation/FileMapping.hpp"
7#include "TTauri/Foundation/ResourceView.hpp"
8#include <nonstd/span>
9
10namespace tt {
11
14class FileView : public ResourceView {
15private:
18 std::shared_ptr<FileMapping> fileMappingObject;
19
25
28 size_t _offset;
29
30public:
31 FileView(std::shared_ptr<FileMapping> const& mappingObject, size_t offset, size_t size);
32 FileView(URL const &location, AccessMode accessMode=AccessMode::OpenForRead, size_t offset=0, size_t size=0);
33 ~FileView() = default;
34
35 FileView() = delete;
36 FileView(FileView const &other) noexcept;
37 FileView(FileView &&other) noexcept;
38 FileView &operator=(FileView const &other) noexcept;
39 FileView &operator=(FileView &&other) noexcept;
40
43 [[nodiscard]] AccessMode accessMode() const noexcept { return fileMappingObject->accessMode(); }
44
47 [[nodiscard]] URL const &location() const noexcept { return fileMappingObject->location(); }
48
51 [[nodiscard]] size_t offset() const noexcept override { return _offset; }
52
55 [[nodiscard]] size_t size() const noexcept override { return _bytes->size(); }
56
59 [[nodiscard]] std::byte *data() noexcept { return _bytes->data(); }
60
63 [[nodiscard]] std::byte const *data() const noexcept override { return _bytes->data(); }
64
67 [[nodiscard]] nonstd::span<std::byte> bytes() noexcept { return *_bytes; }
68
71 [[nodiscard]] nonstd::span<std::byte const> bytes() const noexcept override { return *_bytes; }
72
75 [[nodiscard]] std::string_view string_view() noexcept {
76 return std::string_view{reinterpret_cast<char *>(data()), size()};
77 }
78
81 [[nodiscard]] std::string_view string_view() const noexcept override {
82 return std::string_view{reinterpret_cast<char const *>(data()), size()};
83 }
84
89 void flush(void* base, size_t size);
90
94 [[nodiscard]] static std::unique_ptr<ResourceView> loadView(URL const &location) {
95 return std::make_unique<FileView>(location);
96 }
97
98private:
105 static void unmap(nonstd::span<std::byte> *bytes) noexcept;
106
116 [[nodiscard]] static std::shared_ptr<FileMapping> findOrCreateFileMappingObject(URL const& path, AccessMode accessMode, size_t size);
117};
118
119}
Definition FileView.hpp:14
size_t size() const noexcept override
Definition FileView.hpp:55
AccessMode accessMode() const noexcept
Definition FileView.hpp:43
std::byte * data() noexcept
Definition FileView.hpp:59
static std::unique_ptr< ResourceView > loadView(URL const &location)
Definition FileView.hpp:94
void flush(void *base, size_t size)
nonstd::span< std::byte const > bytes() const noexcept override
Definition FileView.hpp:71
size_t offset() const noexcept override
Definition FileView.hpp:51
std::string_view string_view() noexcept
Definition FileView.hpp:75
std::string_view string_view() const noexcept override
Definition FileView.hpp:81
std::byte const * data() const noexcept override
Definition FileView.hpp:63
nonstd::span< std::byte > bytes() noexcept
Definition FileView.hpp:67
URL const & location() const noexcept
Definition FileView.hpp:47
A read-only memory mapping of a resource.
Definition ResourceView.hpp:17
Definition URL.hpp:45