VISR  0.11.1
Versatile Interactive Scene Renderer
signal_routing_parameter.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_PML_SIGNAL_ROUTING_PARAMETER_HPP_INCLUDED
4 #define VISR_PML_SIGNAL_ROUTING_PARAMETER_HPP_INCLUDED
5 
7 #include "export_symbols.hpp"
8 
12 
13 #include <algorithm>
14 #include <ciso646>
15 #include <cstdint>
16 #include <climits>
17 #include <initializer_list>
18 #include <stdexcept>
19 #include <set>
20 #include <tuple>
21 
22 namespace visr
23 {
24 namespace pml
25 {
26 
32 class VISR_PML_LIBRARY_SYMBOL SignalRoutingParameter: public TypedParameterBase<SignalRoutingParameter, pml::EmptyParameterConfig, detail::compileTimeHashFNV1("SignalRouting") >
33 {
34 public:
35  using IndexType = std::size_t;
36 
40  static const IndexType cInvalidIndex = UINT_MAX;
41 
46  struct Entry
47  {
48  public:
51  };
52 
54  {
55  public:
56  bool operator()( Entry const & lhs, Entry const & rhs ) const
57  {
58  return lhs.output < rhs.output;
59  }
60  };
61 
65  using RoutingsType = std::set< Entry, CompareEntries >;
66 
67 
72 
73  explicit SignalRoutingParameter( std::initializer_list<Entry> const & entries );
74 
75  SignalRoutingParameter( const SignalRoutingParameter & rhs ) = default;
76 
80  explicit SignalRoutingParameter( const ParameterConfigBase & rhs );
81 
82  virtual ~SignalRoutingParameter() override;
83 
84  void swap( SignalRoutingParameter& rhs );
85 
86  bool empty() const { return mRoutings.empty(); }
87 
88  std::size_t size() const { return mRoutings.size(); }
89 
90  SignalRoutingParameter & operator=(SignalRoutingParameter const & rhs) = default;
91 
92  RoutingsType::const_iterator begin() const { return mRoutings.begin(); }
93 
94  RoutingsType::const_iterator end() const { return mRoutings.end(); }
95 
96  void addRouting( IndexType inputIdx, IndexType outputIdx )
97  {
98  addRouting( Entry{ inputIdx, outputIdx } );
99  }
100 
105  void addRouting( Entry const & newEntry );
106 
111  bool removeEntry( Entry const & entry );
112 
117  bool removeEntry( IndexType outputIdx );
118 
122  void clear();
123 
124  Entry const & getEntry( IndexType outputIdx ) const
125  {
126  static const Entry returnInvalid{ cInvalidIndex, cInvalidIndex };
127 
128  RoutingsType::const_iterator const findIt = mRoutings.find( Entry{ cInvalidIndex, outputIdx } );
129  return findIt == mRoutings.end() ? returnInvalid : *findIt;
130  }
131 
132  IndexType getInput( IndexType outputIdx ) const
133  {
134  RoutingsType::const_iterator const findIt = mRoutings.find( Entry{ cInvalidIndex, outputIdx } );
135  return findIt == mRoutings.end() ? cInvalidIndex : findIt->input;
136  }
137 
138  IndexType getOutput( IndexType inputIdx ) const;
139 
140  bool parse( std::string const & encoded );
141 
142 private:
143  RoutingsType mRoutings;
144 };
145 
146 } // namespace pml
147 } // namespace visr
148 
150 
151 #endif // VISR_PML_SIGNAL_ROUTING_PARAMETER_HPP_INCLUDED
std::set< Entry, CompareEntries > RoutingsType
Definition: signal_routing_parameter.hpp:65
SignalRoutingParameter()
Definition: signal_routing_parameter.hpp:71
IndexType getInput(IndexType outputIdx) const
Definition: signal_routing_parameter.hpp:132
RoutingsType::const_iterator end() const
Definition: signal_routing_parameter.hpp:94
bool empty() const
Definition: signal_routing_parameter.hpp:86
void addRouting(IndexType inputIdx, IndexType outputIdx)
Definition: signal_routing_parameter.hpp:96
bool operator()(Entry const &lhs, Entry const &rhs) const
Definition: signal_routing_parameter.hpp:56
IndexType output
Definition: signal_routing_parameter.hpp:50
Definition: signal_routing_parameter.hpp:32
Definition: options.cpp:10
Definition: parameter_factory.hpp:20
Definition: parameter_config_base.hpp:22
RoutingsType::const_iterator begin() const
Definition: signal_routing_parameter.hpp:92
Entry const & getEntry(IndexType outputIdx) const
Definition: signal_routing_parameter.hpp:124
#define DEFINE_PARAMETER_TYPE(ParameterClassType, ParameterId, ParameterConfigType)
Definition: parameter_type.hpp:60
std::size_t IndexType
Definition: signal_routing_parameter.hpp:35
Definition: signal_routing_parameter.hpp:53
IndexType input
Definition: signal_routing_parameter.hpp:49
std::size_t size() const
Definition: signal_routing_parameter.hpp:88
Definition: empty_parameter_config.hpp:21
Definition: signal_routing_parameter.hpp:46