Helios Engine
A modular ECS based data-oriented C++23 game engine framework
Loading...
Searching...
No Matches
param_policy.hpp
Go to the documentation of this file.
1#pragma once
2
6
7#include <tuple>
8#include <type_traits>
9
10namespace helios::ecs {
11
12/**
13 * @brief Builds an AccessPolicy by calling `RegisterAccess` on each system
14 * parameter type.
15 * @tparam Params System parameter types
16 * @return The accumulated access policy
17 */
18template <typename... Params>
19[[nodiscard]] constexpr AccessPolicy BuildPolicyFromParams() {
20 AccessPolicyBuilder builder;
21 RegisterParamAccess<Params...>(builder);
22 return builder.Build();
23}
24
25/**
26 * @brief Deduces parameter types from the system's `operator()` signature and
27 * builds the access policy.
28 * @tparam T System type satisfying `SystemTrait`
29 * @return The accumulated access policy
30 */
31template <SystemTrait T>
32[[nodiscard]] constexpr AccessPolicy BuildPolicyFromSystem() {
33 return []<typename... Args>(std::tuple<Args...>*) {
34 return BuildPolicyFromParams<Args...>();
35 }(static_cast<typename details::MemberFnArgs<
36 decltype(&std::remove_cvref_t<T>::operator())>::ArgsTuple*>(
37 nullptr));
38}
39
40} // namespace helios::ecs
Fluent builder for constructing an AccessPolicy.
constexpr AccessPolicy Build() noexcept
Builds and returns the accumulated AccessPolicy.
Stores data access requirements for a system at compile time.
constexpr AccessPolicy BuildPolicyFromSystem()
Deduces parameter types from the system's operator() signature and builds the access policy.
constexpr void RegisterParamAccess(AccessPolicyBuilder &builder)
Registers access declarations for each parameter type.
constexpr AccessPolicy BuildPolicyFromParams()
Builds an AccessPolicy by calling RegisterAccess on each system parameter type.
Extracts the argument types of a member function pointer.
Definition system.hpp:25