HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
File.hpp
1// Copyright 2019 Pokitec
2// All rights reserved.
3
4#pragma once
5
6#include "TTauri/Foundation/URL.hpp"
7#include <cstdint>
8#include <map>
9
10namespace tt {
11
12
13enum class AccessMode {
14 Read = 0x1,
15 Write = 0x2,
16 ReadLock = 0x10,
17 WriteLock = 0x20,
18 Open = 0x100,
19 Create = 0x200,
20 Truncate = 0x400,
21 Random = 0x1000,
22 Sequential = 0x2000,
23 NoReuse = 0x4000,
24 WriteThrough = 0x8000,
25 CreateDirectories = 0x10000,
26
27 OpenForRead = 0x101,
28 OpenForReadWrite = 0x103,
29 TruncateOrCreateForWrite = 0x702
30};
31
32[[nodiscard]] inline AccessMode operator|(AccessMode lhs, AccessMode rhs) noexcept
33{
34 return static_cast<AccessMode>(static_cast<int>(lhs) | static_cast<int>(rhs));
35}
36
37[[nodiscard]] inline AccessMode operator&(AccessMode lhs, AccessMode rhs) noexcept
38{
39 return static_cast<AccessMode>(static_cast<int>(lhs) & static_cast<int>(rhs));
40}
41
44[[nodiscard]] inline bool operator>=(AccessMode lhs, AccessMode rhs) noexcept
45{
46 return (lhs & rhs) == rhs;
47}
48
51struct File {
54 AccessMode accessMode;
55
59
62 FileHandle fileHandle;
63
68 File(URL const& location, AccessMode accessMode);
69
70 ~File() noexcept;
71
72 File(File const &other) = delete;
73 File(File &&other) = delete;
74 File &operator=(File const &other) = delete;
75 File &operator=(File &&other) = delete;
76
79 void close();
80
83 ssize_t write(std::byte const *data, ssize_t size);
84
87 ssize_t write(void const *data, ssize_t size) {
88 return write(reinterpret_cast<std::byte const *>(data), size);
89 }
90
93 ssize_t write(char const *data, ssize_t size) {
94 return write(reinterpret_cast<std::byte const *>(data), size);
95 }
96
97 ssize_t write(std::string_view text) {
98 return write(text.data(), ssize(text));
99 }
100
104 [[nodiscard]] static size_t fileSize(URL const &url);
105
106 static void createDirectory(URL const &url, bool hierarchy=false);
107
108 static void createDirectoryHierarchy(URL const &url);
109};
110
111
112}
STL namespace.
Definition File.hpp:51
ssize_t write(std::byte const *data, ssize_t size)
ssize_t write(char const *data, ssize_t size)
Definition File.hpp:93
AccessMode accessMode
Definition File.hpp:54
URL location
Definition File.hpp:58
File(URL const &location, AccessMode accessMode)
FileHandle fileHandle
Definition File.hpp:62
static size_t fileSize(URL const &url)
void close()
Definition URL.hpp:45
T operator>=(T... args)