vgl 1.0.0
Virtual Globe Library: API reference
Loading...
Searching...
No Matches
defaults.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2026 Jeremiah van Oosten
3//
4// C++ wrapper for vgl/defaults.h (docs/c-api.md, section 16). Link vgl::defaults.
5
6#ifndef VGL_DEFAULTS_HPP
7#define VGL_DEFAULTS_HPP
8
9#include <vgl/base.hpp>
10#include <vgl/defaults.h>
11
12#include <cassert>
13#include <cstdint>
14#include <utility>
15
16namespace vgl
17{
18
19// Owns a vgl_thread_pool.
21{
22public:
25 thread_pool(const thread_pool&) = delete;
27 thread_pool(thread_pool&& other) noexcept : handle_(other.release()) {}
29 {
30 if (this != &other)
31 {
32 reset(other.release());
33 }
34 return *this;
35 }
37
38 // info may be null for all defaults.
41 {
42 vgl_thread_pool* handle = nullptr;
43 const auto r = static_cast<result>(vgl_thread_pool_create(info, &handle));
44 if (failed(r))
45 {
46 return unexpected(r);
47 }
48 return thread_pool(handle);
49 }
50
51 [[nodiscard]] vgl_thread_pool* get() const noexcept { return handle_; }
52 [[nodiscard]] explicit operator bool() const noexcept { return handle_ != nullptr; }
53
54 [[nodiscard]] vgl_thread_pool* release() noexcept { return std::exchange(handle_, nullptr); }
55
57 {
58 static_cast<void>(vgl_thread_pool_destroy(std::exchange(handle_, handle)));
59 }
60
61 // The pool must be valid.
63 {
65 assert(handle_ != nullptr);
66 static_cast<void>(vgl_thread_pool_task_interface_get(handle_, &table));
67 return table;
68 }
69
70private:
71 vgl_thread_pool* handle_ = nullptr;
72};
73
74// Owns a vgl_file_reader.
76{
77public:
80 file_reader(const file_reader&) = delete;
82 file_reader(file_reader&& other) noexcept : handle_(other.release()) {}
84 {
85 if (this != &other)
86 {
87 reset(other.release());
88 }
89 return *this;
90 }
92
93 // info may be null for all defaults.
96 {
97 vgl_file_reader* handle = nullptr;
98 const auto r = static_cast<result>(vgl_file_reader_create(info, &handle));
99 if (failed(r))
100 {
101 return unexpected(r);
102 }
103 return file_reader(handle);
104 }
105
106 // Reads on a pool's threads.
108 {
110 info.pool = pool.get();
111 return create(&info);
112 }
113
114 [[nodiscard]] vgl_file_reader* get() const noexcept { return handle_; }
115 [[nodiscard]] explicit operator bool() const noexcept { return handle_ != nullptr; }
116
117 [[nodiscard]] vgl_file_reader* release() noexcept { return std::exchange(handle_, nullptr); }
118
120 {
121 static_cast<void>(vgl_file_reader_destroy(std::exchange(handle_, handle)));
122 }
123
124 // The reader must be valid.
126 {
128 assert(handle_ != nullptr);
129 static_cast<void>(vgl_file_reader_io_interface_get(handle_, &table));
130 return table;
131 }
132
133private:
134 vgl_file_reader* handle_ = nullptr;
135};
136
137// Owns a vgl_http_reader.
139{
140public:
143 http_reader(const http_reader&) = delete;
145 http_reader(http_reader&& other) noexcept : handle_(other.release()) {}
147 {
148 if (this != &other)
149 {
150 reset(other.release());
151 }
152 return *this;
153 }
155
156 // info may be null for all defaults.
159 {
160 vgl_http_reader* handle = nullptr;
161 const auto r = static_cast<result>(vgl_http_reader_create(info, &handle));
162 if (failed(r))
163 {
164 return unexpected(r);
165 }
166 return http_reader(handle);
167 }
168
169 // Reads the URIs that are not HTTP through another interface, such as a file reader's,
170 // whose object must outlive this one.
171 [[nodiscard]] static expected<http_reader> create(const vgl_io_interface& fallback) noexcept
172 {
174 info.fallback = &fallback;
175 return create(&info);
176 }
177
178 // Reads the URIs that are not HTTP with a file reader, which must outlive this one.
180 {
181 const vgl_io_interface fallback = files.io_interface_get();
182 return create(fallback);
183 }
184
185 [[nodiscard]] vgl_http_reader* get() const noexcept { return handle_; }
186 [[nodiscard]] explicit operator bool() const noexcept { return handle_ != nullptr; }
187
188 [[nodiscard]] vgl_http_reader* release() noexcept { return std::exchange(handle_, nullptr); }
189
191 {
192 static_cast<void>(vgl_http_reader_destroy(std::exchange(handle_, handle)));
193 }
194
195 // The reader must be valid.
197 {
199 assert(handle_ != nullptr);
200 static_cast<void>(vgl_http_reader_io_interface_get(handle_, &table));
201 return table;
202 }
203
204private:
205 vgl_http_reader* handle_ = nullptr;
206};
207
208// Owns a vgl_disk_cache.
210{
211public:
214 disk_cache(const disk_cache&) = delete;
215 disk_cache& operator=(const disk_cache&) = delete;
216 disk_cache(disk_cache&& other) noexcept : handle_(other.release()) {}
218 {
219 if (this != &other)
220 {
221 reset(other.release());
222 }
223 return *this;
224 }
226
229 {
230 vgl_disk_cache* handle = nullptr;
231 const auto r = static_cast<result>(vgl_disk_cache_create(&info, &handle));
232 if (failed(r))
233 {
234 return unexpected(r);
235 }
236 return disk_cache(handle);
237 }
238
239 // Caches what source reads in directory, within budget bytes (0 for 1 GiB), with disk work
240 // on pool if it is not null. source's object must outlive the cache and its reads.
241 [[nodiscard]] static expected<disk_cache> create(const char* directory,
242 const vgl_io_interface& source,
243 std::uint64_t budget = 0,
244 thread_pool* pool = nullptr) noexcept
245 {
247 info.directory = directory;
248 info.source = &source;
249 info.budget = budget;
250 info.pool = pool != nullptr ? pool->get() : nullptr;
251 return create(info);
252 }
253
254 [[nodiscard]] vgl_disk_cache* get() const noexcept { return handle_; }
255 [[nodiscard]] explicit operator bool() const noexcept { return handle_ != nullptr; }
256
257 [[nodiscard]] vgl_disk_cache* release() noexcept { return std::exchange(handle_, nullptr); }
258
260 {
261 static_cast<void>(vgl_disk_cache_destroy(std::exchange(handle_, handle)));
262 }
263
264 // The cache must be valid.
266 {
268 assert(handle_ != nullptr);
269 static_cast<void>(vgl_disk_cache_io_interface_get(handle_, &table));
270 return table;
271 }
272
273 // The cache must be valid.
275 {
277 assert(handle_ != nullptr);
278 static_cast<void>(vgl_disk_cache_statistics_get(handle_, &s));
279 return s;
280 }
281
283 {
284 return static_cast<result>(vgl_disk_cache_clear(handle_));
285 }
286
287private:
288 vgl_disk_cache* handle_ = nullptr;
289};
290
291} // namespace vgl
292
293#endif // VGL_DEFAULTS_HPP
Definition defaults.hpp:210
vgl_io_interface io_interface_get() const noexcept
Definition defaults.hpp:265
vgl_disk_cache_statistics statistics_get() const noexcept
Definition defaults.hpp:274
vgl_disk_cache * get() const noexcept
Definition defaults.hpp:254
disk_cache & operator=(const disk_cache &)=delete
vgl_disk_cache * release() noexcept
Definition defaults.hpp:257
result clear() const noexcept
Definition defaults.hpp:282
disk_cache() noexcept=default
static expected< disk_cache > create(const char *directory, const vgl_io_interface &source, std::uint64_t budget=0, thread_pool *pool=nullptr) noexcept
Definition defaults.hpp:241
~disk_cache()
Definition defaults.hpp:225
disk_cache(const disk_cache &)=delete
static expected< disk_cache > create(const vgl_disk_cache_create_info &info) noexcept
Definition defaults.hpp:228
void reset(vgl_disk_cache *handle=nullptr) noexcept
Definition defaults.hpp:259
disk_cache(disk_cache &&other) noexcept
Definition defaults.hpp:216
disk_cache & operator=(disk_cache &&other) noexcept
Definition defaults.hpp:217
Definition base.hpp:87
Definition defaults.hpp:76
vgl_file_reader * release() noexcept
Definition defaults.hpp:117
vgl_io_interface io_interface_get() const noexcept
Definition defaults.hpp:125
file_reader & operator=(const file_reader &)=delete
~file_reader()
Definition defaults.hpp:91
file_reader(file_reader &&other) noexcept
Definition defaults.hpp:82
void reset(vgl_file_reader *handle=nullptr) noexcept
Definition defaults.hpp:119
file_reader(const file_reader &)=delete
static expected< file_reader > create(const vgl_file_reader_create_info *info=nullptr) noexcept
Definition defaults.hpp:95
file_reader() noexcept=default
file_reader & operator=(file_reader &&other) noexcept
Definition defaults.hpp:83
vgl_file_reader * get() const noexcept
Definition defaults.hpp:114
static expected< file_reader > create(thread_pool &pool) noexcept
Definition defaults.hpp:107
Definition defaults.hpp:139
http_reader & operator=(const http_reader &)=delete
vgl_io_interface io_interface_get() const noexcept
Definition defaults.hpp:196
static expected< http_reader > create(const vgl_io_interface &fallback) noexcept
Definition defaults.hpp:171
static expected< http_reader > create(const vgl_http_reader_create_info *info=nullptr) noexcept
Definition defaults.hpp:158
vgl_http_reader * get() const noexcept
Definition defaults.hpp:185
http_reader(const http_reader &)=delete
static expected< http_reader > create(const file_reader &files) noexcept
Definition defaults.hpp:179
http_reader & operator=(http_reader &&other) noexcept
Definition defaults.hpp:146
vgl_http_reader * release() noexcept
Definition defaults.hpp:188
void reset(vgl_http_reader *handle=nullptr) noexcept
Definition defaults.hpp:190
~http_reader()
Definition defaults.hpp:154
http_reader() noexcept=default
http_reader(http_reader &&other) noexcept
Definition defaults.hpp:145
Definition defaults.hpp:21
thread_pool() noexcept=default
~thread_pool()
Definition defaults.hpp:36
static expected< thread_pool > create(const vgl_thread_pool_create_info *info=nullptr) noexcept
Definition defaults.hpp:40
thread_pool(const thread_pool &)=delete
void reset(vgl_thread_pool *handle=nullptr) noexcept
Definition defaults.hpp:56
vgl_thread_pool * release() noexcept
Definition defaults.hpp:54
thread_pool & operator=(thread_pool &&other) noexcept
Definition defaults.hpp:28
vgl_thread_pool * get() const noexcept
Definition defaults.hpp:51
thread_pool(thread_pool &&other) noexcept
Definition defaults.hpp:27
vgl_task_interface task_interface_get() const noexcept
Definition defaults.hpp:62
thread_pool & operator=(const thread_pool &)=delete
Definition base.hpp:72
vgl_result vgl_http_reader_io_interface_get(vgl_http_reader *reader, vgl_io_interface *out_interface)
vgl_result vgl_disk_cache_clear(vgl_disk_cache *cache)
vgl_result vgl_file_reader_io_interface_get(vgl_file_reader *reader, vgl_io_interface *out_interface)
vgl_result vgl_thread_pool_task_interface_get(vgl_thread_pool *pool, vgl_task_interface *out_interface)
vgl_result vgl_thread_pool_destroy(vgl_thread_pool *pool)
vgl_result vgl_disk_cache_io_interface_get(vgl_disk_cache *cache, vgl_io_interface *out_interface)
struct vgl_http_reader vgl_http_reader
Definition defaults.h:222
vgl_result vgl_disk_cache_statistics_get(vgl_disk_cache *cache, vgl_disk_cache_statistics *out_statistics)
vgl_result vgl_file_reader_destroy(vgl_file_reader *reader)
vgl_result vgl_thread_pool_create(const vgl_thread_pool_create_info *info, vgl_thread_pool **out_pool)
vgl_result vgl_disk_cache_destroy(vgl_disk_cache *cache)
vgl_result vgl_http_reader_create(const vgl_http_reader_create_info *info, vgl_http_reader **out_reader)
struct vgl_thread_pool vgl_thread_pool
Definition defaults.h:63
vgl_result vgl_http_reader_destroy(vgl_http_reader *reader)
struct vgl_file_reader vgl_file_reader
Definition defaults.h:132
struct vgl_disk_cache vgl_disk_cache
Definition defaults.h:318
vgl_result vgl_file_reader_create(const vgl_file_reader_create_info *info, vgl_file_reader **out_reader)
vgl_result vgl_disk_cache_create(const vgl_disk_cache_create_info *info, vgl_disk_cache **out_cache)
Definition base.hpp:22
result
Definition base.hpp:25
Definition defaults.h:321
Definition defaults.h:346
Definition defaults.h:135
Definition defaults.h:225
Definition foundation.h:102
Definition foundation.h:232
Definition defaults.h:66