VISR  0.11.7
Versatile Interactive Scene Renderer
sparse_gain_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 SparseGainRouting
23 {
24 public:
25  using IndexType = std::size_t;
26  using GainType = float; //for the moment, use a fixed type for gains instead of making it a template parameter
27 
32  : entryIndex( cInvalidIndex )
33  , rowIndex( cInvalidIndex )
34  , columnIndex( cInvalidIndex )
35  , gain( 0.0 )
36  {}
37 
46  GainType pGain = static_cast<GainType>(1.0) )
47  : entryIndex(pEntry)
48  , rowIndex( pRow )
49  , columnIndex( pColumn )
50  , gain( pGain )
51  {
52  }
53 
58  static const IndexType cInvalidIndex = UINT_MAX;
59 
76 };
77 
81 class VISR_RBBL_LIBRARY_SYMBOL SparseGainRoutingList
82 {
83 public:
85 
90 
95  SparseGainRoutingList( std::initializer_list<SparseGainRouting> const & entries );
96 
102 
107  SparseGainRoutingList& operator=( const SparseGainRoutingList & rhs );
108 
114  static SparseGainRoutingList const fromJson( std::string const & initString );
115 
122  static SparseGainRoutingList const fromJson( std::istream & initStream );
123 
128  {
129  public:
130  bool operator()( SparseGainRouting const & lhs, SparseGainRouting const & rhs ) const
131  {
132  return ( lhs.entryIndex < rhs.entryIndex );
133  }
134  };
135 
139  using RoutingsType = std::set< SparseGainRouting, CompareEntries >;
140 
144  void clear();
145 
151  void swap( SparseGainRoutingList& rhs );
152 
157  bool empty() const { return mRoutings.empty(); }
158 
163  std::size_t size() const { return mRoutings.size(); }
164 
165  RoutingsType::const_iterator begin() const { return mRoutings.begin(); }
166 
167  RoutingsType::const_iterator end() const { return mRoutings.end(); }
168 
180  SparseGainRouting::GainType gain = 0.0f )
181  {
182  addRouting( SparseGainRouting( entryIdx, rowIdx, columnIdx, gain) );
183  }
184 
191  void addRouting( SparseGainRouting const & newEntry );
192 
193 
200  bool removeRouting( IndexType const & entryIndex );
201 
202 
209  bool removeRouting( SparseGainRouting const & entry );
210 
217  bool removeRouting( IndexType inputIdx, IndexType outputIdx );
218 
224  SparseGainRouting const & getEntry( IndexType entryIdx ) const
225  {
226  static SparseGainRouting const sInvalidRouting;
227  RoutingsType::const_iterator const findIt = mRoutings.find( SparseGainRouting( entryIdx, SparseGainRouting::cInvalidIndex, SparseGainRouting::cInvalidIndex ) );
228  return findIt == mRoutings.end() ? sInvalidRouting : *findIt;
229  }
230 
246  void parseJson( std::string const & encoded );
247 
263  void parseJson( std::istream & encoded );
264 private:
268  RoutingsType mRoutings;
269 };
270 
271 } // namespace rbbl
272 } // namespace visr
273 
274 #endif // VISR_RBBL_FILTER_ROUTING_PARAMETER_HPP_INCLUDED
bool operator()(SparseGainRouting const &lhs, SparseGainRouting const &rhs) const
Definition: sparse_gain_routing.hpp:130
Definition: sparse_gain_routing.hpp:22
IndexType rowIndex
Definition: sparse_gain_routing.hpp:67
RoutingsType::const_iterator begin() const
Definition: sparse_gain_routing.hpp:165
IndexType columnIndex
Definition: sparse_gain_routing.hpp:71
std::size_t size() const
Definition: sparse_gain_routing.hpp:163
void addRouting(SparseGainRouting::IndexType entryIdx, SparseGainRouting::IndexType rowIdx, SparseGainRouting::IndexType columnIdx, SparseGainRouting::GainType gain=0.0f)
Definition: sparse_gain_routing.hpp:177
Definition: sparse_gain_routing.hpp:127
SparseGainRouting const & getEntry(IndexType entryIdx) const
Definition: sparse_gain_routing.hpp:224
float GainType
Definition: sparse_gain_routing.hpp:26
SparseGainRouting()
Definition: sparse_gain_routing.hpp:31
static const IndexType cInvalidIndex
Definition: sparse_gain_routing.hpp:58
Definition: options.cpp:10
IndexType entryIndex
Definition: sparse_gain_routing.hpp:63
std::size_t IndexType
Definition: sparse_gain_routing.hpp:25
RoutingsType::const_iterator end() const
Definition: sparse_gain_routing.hpp:167
SparseGainRouting(IndexType pEntry, IndexType pRow, IndexType pColumn, GainType pGain=static_cast< GainType >(1.0))
Definition: sparse_gain_routing.hpp:45
GainType gain
Definition: sparse_gain_routing.hpp:75
std::set< SparseGainRouting, CompareEntries > RoutingsType
Definition: sparse_gain_routing.hpp:139
Definition: sparse_gain_routing.hpp:81
bool empty() const
Definition: sparse_gain_routing.hpp:157
SparseGainRouting::IndexType IndexType
Definition: sparse_gain_routing.hpp:84