HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
static_resource_list.hpp
1// Copyright Take Vos 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 "assert.hpp"
8#include <span>
9#include <cstddef>
10#include <atomic>
11#include <optional>
12
13namespace hi::inline v1 {
14struct static_resource_item;
15
20inline std::atomic<static_resource_item const *> static_resource_list = nullptr;
21
23 static_resource_item const *next;
24 char const *filename;
25 std::span<std::byte const> bytes;
26
31 [[nodiscard]] static std::span<std::byte const> find(std::string_view filename) noexcept
32 {
33 for (auto ptr = static_resource_list.load(); ptr != nullptr; ptr = ptr->next) {
34 if (filename == ptr->filename) {
35 return ptr->bytes;
36 }
37 }
38 return {};
39 }
40
53 [[nodiscard]] hi_no_inline static static_resource_item const *add(static_resource_item *new_item) noexcept
54 {
55 hi_axiom(new_item != nullptr);
56 return new_item->next = static_resource_list.exchange(new_item);
57 }
58};
59
60} // namespace hi::inline v1
Definition static_resource_list.hpp:22
static hi_no_inline static_resource_item const * add(static_resource_item *new_item) noexcept
Add a resource item to the list.
Definition static_resource_list.hpp:53
static std::span< std::byte const > find(std::string_view filename) noexcept
Search for a static resource item.
Definition static_resource_list.hpp:31