31#include <dspatch/Common.h>
33#include <fast_any/any.h>
64 inline void SetSignalCount(
int signalCount );
65 inline int GetSignalCount()
const;
67 inline fast_any::any* GetSignal(
int signalIndex );
69 inline bool HasValue(
int signalIndex )
const;
71 template <
typename ValueType>
72 inline ValueType* GetValue(
int signalIndex )
const;
74 template <
typename ValueType>
75 inline void SetValue(
int signalIndex,
const ValueType& newValue );
77 template <
typename ValueType>
78 inline void MoveValue(
int signalIndex, ValueType&& newValue );
80 inline void SetSignal(
int toSignalIndex,
const fast_any::any& fromSignal );
81 inline void MoveSignal(
int toSignalIndex, fast_any::any& fromSignal );
83 inline void ClearAllValues();
85 inline const fast_any::type_info& GetType(
int signalIndex )
const;
88 std::vector<fast_any::any> _signals;
91inline SignalBus::SignalBus() =
default;
94inline SignalBus::SignalBus(
SignalBus&& rhs )
95 : _signals( std::move( rhs._signals ) )
99inline void SignalBus::SetSignalCount(
int signalCount )
101 _signals.resize( signalCount );
104inline int SignalBus::GetSignalCount()
const
106 return (
int)_signals.size();
109inline fast_any::any* SignalBus::GetSignal(
int signalIndex )
121 if ( (
size_t)signalIndex < _signals.size() )
123 return &_signals[signalIndex];
131inline bool SignalBus::HasValue(
int signalIndex )
const
133 if ( (
size_t)signalIndex < _signals.size() )
135 return _signals[signalIndex].has_value();
143template <
typename ValueType>
144inline ValueType* SignalBus::GetValue(
int signalIndex )
const
150 if ( (
size_t)signalIndex < _signals.size() )
152 return _signals[signalIndex].as<ValueType>();
160template <
typename ValueType>
161inline void SignalBus::SetValue(
int signalIndex,
const ValueType& newValue )
163 if ( (
size_t)signalIndex < _signals.size() )
165 _signals[signalIndex].emplace<ValueType>( newValue );
169template <
typename ValueType>
170inline void SignalBus::MoveValue(
int signalIndex, ValueType&& newValue )
172 if ( (
size_t)signalIndex < _signals.size() )
174 _signals[signalIndex].emplace<ValueType>( std::move( newValue ) );
178inline void SignalBus::SetSignal(
int toSignalIndex,
const fast_any::any& fromSignal )
180 if ( (
size_t)toSignalIndex < _signals.size() )
182 _signals[toSignalIndex] = fromSignal;
186inline void SignalBus::MoveSignal(
int toSignalIndex, fast_any::any& fromSignal )
198 if ( (
size_t)toSignalIndex < _signals.size() )
200 _signals[toSignalIndex].swap( fromSignal );
204inline void SignalBus::ClearAllValues()
206 for (
auto& signal : _signals )
212inline const fast_any::type_info& SignalBus::GetType(
int signalIndex )
const
214 if ( (
size_t)signalIndex < _signals.size() )
216 return _signals[signalIndex].type();
220 return fast_any::type_id<void>;