VISR  0.11.8
Versatile Interactive Scene Renderer
filter_routing.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_RBBL_FILTER_ROUTING_PARAMETER_HPP_INCLUDED
4 #define VISR_RBBL_FILTER_ROUTING_PARAMETER_HPP_INCLUDED
5 
6 #include "export_symbols.hpp"
7 
8 #include <climits>
9 #include <iosfwd>
10 #include <initializer_list>
11 #include <set>
12 
13 namespace visr
14 {
15 namespace rbbl
16 {
17 
22 struct VISR_RBBL_LIBRARY_SYMBOL FilterRouting
23 {
24  friend class FilterRoutingList;
25 public:
26  using IndexType = std::size_t;
27  using GainType = double; //for the moment, use a fixed type for gains instead of making it a template parameter
28 
33  : inputIndex( cInvalidIndex )
34  , outputIndex( cInvalidIndex )
35  , filterIndex( cInvalidIndex )
36  , gainLinear( 0.0 )
37  {}
38 
46  FilterRouting( IndexType pInput, IndexType pOutput, IndexType pFilter, GainType pGain = 1.0 )
47  : inputIndex( pInput )
48  , outputIndex( pOutput )
49  , filterIndex( pFilter )
50  , gainLinear( pGain )
51  {
52  }
53 
58  static const IndexType cInvalidIndex = UINT_MAX;
59 
76 };
77 
81 class VISR_RBBL_LIBRARY_SYMBOL FilterRoutingList
82 {
83 public:
85 
90 
95  FilterRoutingList( std::initializer_list<FilterRouting> const & entries );
96 
101  FilterRoutingList( const FilterRoutingList & rhs ) = default;
102 
108  static FilterRoutingList const fromJson( std::string const & initString );
109 
116  static FilterRoutingList const fromJson( std::istream & initStream );
117 
122  {
123  public:
124  bool operator()( FilterRouting const & lhs, FilterRouting const & rhs ) const
125  {
126  if( lhs.inputIndex < rhs.inputIndex )
127  {
128  return true;
129  }
130  else if( lhs.inputIndex > rhs.inputIndex )
131  {
132  return false;
133  }
134  else // lhs.inputIndex == rhs.inputIndex
135  {
136  return lhs.outputIndex < rhs.outputIndex;
137  }
138  }
139  };
140 
144  using RoutingsType = std::set< FilterRouting, CompareEntries >;
145 
151  void swap( FilterRoutingList& rhs );
152 
157  bool empty() const { return mRoutings.empty(); }
158 
163  std::size_t size() const { return mRoutings.size(); }
164 
169  FilterRoutingList & operator=( FilterRoutingList const & rhs) = default;
170 
171  RoutingsType::const_iterator begin() const { return mRoutings.begin(); }
172 
173  RoutingsType::const_iterator end() const { return mRoutings.end(); }
174 
184  FilterRouting::IndexType outputIdx,
185  FilterRouting::IndexType filterIdx,
186  FilterRouting::GainType gain = 0.0 )
187  {
188  addRouting( FilterRouting( inputIdx, outputIdx, filterIdx, gain) );
189  }
190 
197  void addRouting( FilterRouting const & newEntry );
198 
205  bool removeRouting( FilterRouting const & entry );
206 
213  bool removeRouting( IndexType inputIdx, IndexType outputIdx );
214 
221  FilterRouting const & getEntry( IndexType inputIdx, IndexType outputIdx ) const
222  {
223  static FilterRouting const sInvalidRouting;
224  RoutingsType::const_iterator const findIt = mRoutings.find( FilterRouting( inputIdx, outputIdx, FilterRouting::cInvalidIndex ) );
225  return findIt == mRoutings.end() ? sInvalidRouting : *findIt;
226  }
227 
243  void parseJson( std::string const & encoded );
244 
260  void parseJson( std::istream & encoded );
261 private:
265  RoutingsType mRoutings;
266 };
267 
268 } // namespace rbbl
269 } // namespace visr
270 
271 #endif // VISR_RBBL_FILTER_ROUTING_PARAMETER_HPP_INCLUDED
Definition: filter_routing.hpp:22
bool empty() const
Definition: filter_routing.hpp:157
GainType gainLinear
Definition: filter_routing.hpp:75
Definition: filter_routing.hpp:121
std::set< FilterRouting, CompareEntries > RoutingsType
Definition: filter_routing.hpp:144
FilterRouting::IndexType IndexType
Definition: filter_routing.hpp:84
static const IndexType cInvalidIndex
Definition: filter_routing.hpp:58
FilterRouting()
Definition: filter_routing.hpp:32
FilterRoutingList()
Definition: filter_routing.hpp:89
void addRouting(FilterRouting::IndexType inputIdx, FilterRouting::IndexType outputIdx, FilterRouting::IndexType filterIdx, FilterRouting::GainType gain=0.0)
Definition: filter_routing.hpp:183
double GainType
Definition: filter_routing.hpp:27
FilterRouting const & getEntry(IndexType inputIdx, IndexType outputIdx) const
Definition: filter_routing.hpp:221
IndexType outputIndex
Definition: filter_routing.hpp:67
Definition: options.cpp:10
std::size_t size() const
Definition: filter_routing.hpp:163
IndexType filterIndex
Definition: filter_routing.hpp:71
RoutingsType::const_iterator begin() const
Definition: filter_routing.hpp:171
std::size_t IndexType
Definition: filter_routing.hpp:26
IndexType inputIndex
Definition: filter_routing.hpp:63
FilterRouting(IndexType pInput, IndexType pOutput, IndexType pFilter, GainType pGain=1.0)
Definition: filter_routing.hpp:46
RoutingsType::const_iterator end() const
Definition: filter_routing.hpp:173
bool operator()(FilterRouting const &lhs, FilterRouting const &rhs) const
Definition: filter_routing.hpp:124
Definition: filter_routing.hpp:81