VISR  0.11.8
Versatile Interactive Scene Renderer
audio_connection_map.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_LIBRRL_AUDIO_CONNECTION_MAP_HPP_INCLUDED
4 #define VISR_LIBRRL_AUDIO_CONNECTION_MAP_HPP_INCLUDED
5 
6 #include <libvisr/constants.hpp>
7 
8 #include <iosfwd>
9 #include <map>
10 #include <memory>
11 #include <set>
12 #include <stdexcept>
13 #include <vector>
14 
15 namespace visr
16 {
17 namespace impl
18 {
21 }
22 
23 namespace rrl
24 {
25 
30 {
31 public:
32  explicit AudioChannel( impl::AudioPortBaseImplementation * port, std::size_t channel )
33  : mVal( port, channel )
34  {
35  }
36  impl::AudioPortBaseImplementation * port() const { return std::get<0>( mVal ); }
37  std::size_t const channel() const { return std::get<1>( mVal ); }
38 
39  AudioChannel( AudioChannel const & rhs ) = default;
40 
41  AudioChannel& operator=( AudioChannel const & rhs ) = default;
42 
43  AudioChannel( AudioChannel && rhs ) = default;
44 
45  AudioChannel& operator=( AudioChannel && rhs ) = default;
46 
47 
48  bool operator<( AudioChannel const & rhs ) const { return mVal < rhs.mVal; }
49 
50  bool operator==( AudioChannel const & rhs ) const { return mVal == rhs.mVal; }
51 
52 private:
53  std::tuple<impl::AudioPortBaseImplementation *, std::size_t> mVal;
54 };
55 
62 std::ostream& operator<<( std::ostream & str, AudioChannel const & channel );
63 
65 {
66 public:
67 
68  using Container = std::multimap< AudioChannel, AudioChannel >;
69 
70  using value_type = Container::value_type;
71 
72  using iterator = Container::const_iterator;
73  using const_iterator = Container::const_iterator;
74 
79 
80  explicit AudioConnectionMap( impl::ComponentImplementation const & component,
81  bool recursive = false );
82 
83  bool fill( impl::ComponentImplementation const & component,
84  std::ostream & messages,
85  bool recursive = false );
86 
90  void swap( AudioConnectionMap & rhs ) noexcept;
91 
92  void insert( value_type const & connection );
93 
94  iterator insert( iterator hint, value_type const & connection );
95 
96  void insert( iterator first, iterator last );
97 
98  void insert( AudioChannel const & sender, AudioChannel const & receiver );
99 
100  Container const & connections() const { return mConnections; }
101 
102  const_iterator begin() const { return mConnections.begin(); }
103 
104  const_iterator end() const { return mConnections.end(); }
105 
106  std::size_t size() const { return mConnections.size(); }
107 
108  std::pair<const_iterator, const_iterator > connectionsForReceiveChannel( AudioChannel const & audioChannel ) const
109  {
110  return mConnections.equal_range( audioChannel );
111  }
114  const_iterator findReceiveChannel( AudioChannel const & signal ) const;
115 
117 
118 private:
119  bool fillRecursive( impl::ComponentImplementation const & component,
120  std::ostream & messages,
121  bool recursive );
122 
123  Container mConnections;
124 };
125 
131 std::ostream & operator<<( std::ostream & stream, AudioConnectionMap const & connections );
132 
133 } // namespace rrl
134 } // namespace visr
135 
136 #endif // #ifndef VISR_LIBRRL_AUDIO_CONNECTION_MAP_HPP_INCLUDED
ParameterConnectionMap resolvePlaceholders(ParameterConnectionMap const &fullConnections)
Definition: parameter_connection_map.cpp:93
std::ostream & operator<<(std::ostream &str, impl::AudioConnection const &conn)
Definition: audio_connection_descriptor.cpp:39
bool operator==(AudioChannel const &rhs) const
Definition: audio_connection_map.hpp:50
Definition: component_implementation.hpp:34
Definition: audio_connection_map.hpp:29
Definition: audio_port_base_implementation.hpp:27
impl::AudioPortBaseImplementation * port() const
Definition: audio_connection_map.hpp:36
const_iterator end() const
Definition: audio_connection_map.hpp:104
std::size_t size() const
Definition: audio_connection_map.hpp:106
bool fillRecursive(ParameterConnectionMap &res, impl::ComponentImplementation const &component, std::ostream &messages)
Definition: parameter_connection_map.cpp:19
std::multimap< AudioChannel, AudioChannel > Container
Definition: audio_connection_map.hpp:68
std::size_t const channel() const
Definition: audio_connection_map.hpp:37
Definition: options.cpp:10
Definition: audio_connection_map.hpp:64
Container::value_type value_type
Definition: audio_connection_map.hpp:70
Container::const_iterator iterator
Definition: audio_connection_map.hpp:72
AudioChannel(impl::AudioPortBaseImplementation *port, std::size_t channel)
Definition: audio_connection_map.hpp:32
const_iterator begin() const
Definition: audio_connection_map.hpp:102
bool operator<(AudioChannel const &rhs) const
Definition: audio_connection_map.hpp:48
Container const & connections() const
Definition: audio_connection_map.hpp:100
std::pair< const_iterator, const_iterator > connectionsForReceiveChannel(AudioChannel const &audioChannel) const
Definition: audio_connection_map.hpp:108
Container::const_iterator const_iterator
Definition: audio_connection_map.hpp:73