Helios Engine
A modular ECS based data-oriented C++23 game engine framework
Loading...
Searching...
No Matches
param.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <functional>
6
7namespace helios::ecs {
8
9/**
10 * @brief Read-only or mutable access to resource.
11 * @details Pointer-like interface for resource access.
12 * Use `Res<const T>` for read-only access and `Res<T>` for mutable
13 * access.
14 * @tparam T Resource type
15 */
16template <ResourceTrait T>
17class Res {
18public:
19 /**
20 * @brief Constructs a resource reference.
21 * @param resource Resource value
22 */
23 explicit constexpr Res(T& resource) noexcept : resource_(resource) {}
24 constexpr Res(const Res&) noexcept = default;
25 constexpr Res(Res&&) noexcept = default;
26 constexpr ~Res() noexcept = default;
27
28 constexpr Res& operator=(const Res&) noexcept = default;
29 constexpr Res& operator=(Res&&) noexcept = default;
30
31 [[nodiscard]] constexpr T* operator->() noexcept { return &resource_.get(); }
32 [[nodiscard]] constexpr T& operator*() noexcept { return resource_.get(); }
33
34 [[nodiscard]] constexpr const T* operator->() const noexcept {
35 return &resource_.get();
36 }
37
38 [[nodiscard]] constexpr const T& operator*() const noexcept {
39 return resource_.get();
40 }
41
42private:
43 std::reference_wrapper<T> resource_;
44};
45
46/// @brief Read-only access to thread-safe resources.
47template <AsyncResourceTrait T>
49
50} // namespace helios::ecs
Read-only or mutable access to resource.
Definition param.hpp:17
constexpr Res(const Res &) noexcept=default
constexpr const T & operator*() const noexcept
Definition param.hpp:38
constexpr Res(T &resource) noexcept
Constructs a resource reference.
Definition param.hpp:23
constexpr T & operator*() noexcept
Definition param.hpp:32
constexpr Res(Res &&) noexcept=default
constexpr const T * operator->() const noexcept
Definition param.hpp:34
Res< T > AsyncRes
Read-only access to thread-safe resources.
Definition param.hpp:48