12 #include <type_traits>
24 namespace dispatch_model {
46 template<
typename Storage,
typename Overflow>
53 static_assert(overflow_policy<Overflow>,
54 "tsm: queue policy requires a known overflow policy");
62 template<
typename QueueOrStorage,
typename Overflow>
63 struct select_runtime_queue_policy
68 template<
typename QueuePolicy,
typename Overflow>
69 requires runtime::runtime_queue_policy<QueuePolicy>
70 struct select_runtime_queue_policy<QueuePolicy, Overflow>
72 using type = QueuePolicy;
77 template<
typename DispatchModel,
78 typename QueueOrStorage,
91 using selected_overflow =
92 std::conditional_t<overflow_policy<Scheduler>, Scheduler, Overflow>;
93 using selected_queue =
94 typename detail::select_runtime_queue_policy<QueueOrStorage,
95 selected_overflow>::type;
98 static_assert(dispatch_model_policy<DispatchModel>,
99 "tsm: runtime policy requires a known dispatch model");
100 static_assert(runtime::runtime_queue_policy<selected_queue>,
101 "tsm: runtime policy requires a known queue policy");
107 using storage =
typename selected_queue::storage;
108 using overflow =
typename selected_queue::overflow;
113 template<
typename Topology,
115 typename Scheduler = void,
117 typename Transport =
void>
Concepts for runtime queues and dispatch policies.
requires(!has_transition_type_c< T > &&has_transition_member_c< T >) struct transitions_of< T >
Definition: transition.h:479
Definition: concepts.h:40
::tsm::overflow::reject_newest reject_newest
Definition: concepts.h:87
Definition: bare_metal.h:20
Storage storage
Definition: policy.h:56
selected_queue queue
Definition: policy.h:104
DispatchModel topology
Definition: policy.h:106
DispatchModel dispatch_model
Definition: policy.h:103
typename selected_queue::storage storage
Definition: policy.h:107