VISR  0.11.8
Versatile Interactive Scene Renderer
component_implementation.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_IMPL_COMPONENT_IMPLEMENTATION_HPP_INCLUDED
4 #define VISR_IMPL_COMPONENT_IMPLEMENTATION_HPP_INCLUDED
5 
6 #include "../constants.hpp"
7 #include "../export_symbols.hpp"
8 #include "../status_message.hpp"
9 #include "../signal_flow_context.hpp"
10 
11 #include <cstddef>
12 #include <string>
13 #include <vector>
14 #include <memory>
15 
16 namespace visr
17 {
18 // Forward declaration(s)
19 class AudioPortBase;
20 class Component;
21 class ParameterPortBase;
22 
23 namespace impl
24 {
25 
26 class CompositeComponentImplementation;
27 class AudioPortBaseImplementation;
28 class ParameterPortBaseImplementation;
29 
34 class VISR_CORE_LIBRARY_SYMBOL ComponentImplementation
35 {
36 public:
37  friend class AudioPortBaseImplementation; // For registering/ unregistering audio ports
38  friend class ParameterPortBaseImplementation; // For registering / unregistering audio ports.
39  friend class CompositeComponentImplementation; // For unsetting the parent member during destruction.
40 
41  /*VISR_CORE_LIBRARY_SYMBOL*/ explicit ComponentImplementation( visr::Component & component,
42  SignalFlowContext const & context,
43  char const * componentName,
45 
49  /*VISR_CORE_LIBRARY_SYMBOL*/ virtual ~ComponentImplementation();
50 
51  ComponentImplementation() = delete;
52 
54 
56 
57  ComponentImplementation& operator=( ComponentImplementation const & ) = delete;
58 
59  ComponentImplementation& operator=( ComponentImplementation && ) = delete;
60 
61 
62  /*VISR_CORE_LIBRARY_SYMBOL*/ static const std::string cNameSeparator;
63 
67  /*VISR_CORE_LIBRARY_SYMBOL*/ std::string const & name() const;
68 
72  /*VISR_CORE_LIBRARY_SYMBOL*/ std::string fullName() const;
73 
80  /*VISR_CORE_LIBRARY_SYMBOL*/ virtual bool isComposite() const;
81 
85  /*VISR_CORE_LIBRARY_SYMBOL*/ SamplingFrequencyType samplingFrequency() const;
86 
95  /*VISR_CORE_LIBRARY_SYMBOL*/ std::size_t period() const;
96 
97  template< class PortType >
98  using PortContainer = std::vector<PortType*>;
99 
101 
106  /*VISR_CORE_LIBRARY_SYMBOL*/ AudioPortContainer const & audioPorts() const { return mAudioPorts; }
107 
108  /*VISR_CORE_LIBRARY_SYMBOL*/ AudioPortContainer & audioPorts() { return mAudioPorts; }
109 
110  /*VISR_CORE_LIBRARY_SYMBOL*/ AudioPortContainer::const_iterator audioPortBegin() const { return mAudioPorts.begin(); }
111 
112  /*VISR_CORE_LIBRARY_SYMBOL*/ AudioPortContainer::const_iterator audioPortEnd( ) const { return mAudioPorts.end(); }
114 
120 
121  /*VISR_CORE_LIBRARY_SYMBOL*/ ParameterPortContainer const & parameterPorts() const { return mParameterPorts; }
122 
123  /*VISR_CORE_LIBRARY_SYMBOL*/ ParameterPortContainer & parameterPorts() { return mParameterPorts; }
124 
125  /*VISR_CORE_LIBRARY_SYMBOL*/ ParameterPortContainer::const_iterator parameterPortBegin() const;
126  /*VISR_CORE_LIBRARY_SYMBOL*/ ParameterPortContainer::const_iterator parameterPortEnd( ) const;
127 
128  /*VISR_CORE_LIBRARY_SYMBOL*/ ParameterPortContainer::iterator parameterPortBegin( );
129  /*VISR_CORE_LIBRARY_SYMBOL*/ ParameterPortContainer::iterator parameterPortEnd( );
130 
135 
136 
143  template<class PortType>
144  /*VISR_CORE_LIBRARY_SYMBOL*/ PortContainer<PortType> const & ports() const;
145 
152  template<class PortType>
153  /*VISR_CORE_LIBRARY_SYMBOL*/ PortContainer<PortType> & ports();
154 
155  template<class PortType>
156  typename PortContainer<PortType>::iterator portBegin() { return ports<PortType>().begin(); }
157  template<class PortType>
158  typename PortContainer<PortType>::iterator portEnd() { return ports<PortType>().end(); }
159  template<class PortType>
160  typename PortContainer<PortType>::const_iterator portBegin() const { return ports<PortType>().begin(); }
161  template<class PortType>
162  typename PortContainer<PortType>::const_iterator portEnd() const { return ports<PortType>().end(); }
163 
164  template<class PortType>
165  typename PortContainer<PortType>::const_iterator findPortEntry( char const * portName ) const;
166 
167  template<class PortType>
168  typename PortContainer<PortType>::iterator findPortEntry( char const * portName );
170 
175  void registerParameterPort( ParameterPortBaseImplementation * port );
176 
181  bool unregisterParameterPort( ParameterPortBaseImplementation * port );
182 
188  ParameterPortContainer::iterator findParameterPortEntry( char const * portName );
189 
195  ParameterPortContainer::const_iterator findParameterPortEntry( char const * portName ) const;
196 
200  ParameterPortBase const * findParameterPort( char const * portName ) const;
201 
205  ParameterPortBase * findParameterPort( char const * portName );
206 
210  AudioPortBase* findAudioPort( char const * name );
211 
215  AudioPortBase const * findAudioPort( char const * name ) const;
216 
220  void status( StatusMessage::Kind statusId, char const * message );
221 
226  bool isTopLevel() const { return mParent == nullptr; }
227 
232  CompositeComponentImplementation * parent() { return mParent; }
233 
238  CompositeComponentImplementation const * parent() const { return mParent; }
239 
246  visr::Component & component() { return mComponent; }
247 
248  visr::Component const & component() const { return mComponent; }
250 
251  SignalFlowContext const & context( ) const { return mContext; }
252 
253 private:
258  void setParent( CompositeComponentImplementation * parent );
259 
260 
266  void registerAudioPort( AudioPortBaseImplementation* port );
267  void unregisterAudioPort( AudioPortBaseImplementation* port );
268 
269  AudioPortContainer mAudioPorts;
270 
271  AudioPortContainer const & getAudioPortList( ) const;
272 
273  AudioPortContainer& getAudioPortList( );
274 
275  AudioPortContainer::iterator findAudioPortEntry( char const * portName );
276 
277  AudioPortContainer::const_iterator findAudioPortEntry( char const * portName ) const;
278 
282  visr::Component & mComponent;
283 
288  SignalFlowContext const mContext;
289 
294  ParameterPortContainer mParameterPorts;
295 
297 
300  std::string const mName;
301 
309 };
310 
311 } // namespace impl
312 } // namespace visr
313 
314 #endif // #ifndef VISR_IMPL_COMPONENT_IMPLEMENTATION_HPP_INCLUDED
Kind
Definition: status_message.hpp:20
SignalFlowContext const & context() const
Definition: component_implementation.hpp:251
CompositeComponentImplementation * parent()
Definition: component_implementation.hpp:232
Definition: composite_component_implementation.hpp:24
PortContainer< PortType >::iterator portBegin()
Definition: component_implementation.hpp:156
Definition: component_implementation.hpp:34
AudioPortContainer const & audioPorts() const
Definition: component_implementation.hpp:106
Definition: audio_port_base.hpp:28
Definition: parameter_port_base_implementation.hpp:30
AudioPortContainer::const_iterator audioPortEnd() const
Definition: component_implementation.hpp:112
PortContainer< PortType >::const_iterator portEnd() const
Definition: component_implementation.hpp:162
Definition: audio_port_base_implementation.hpp:27
AudioPortContainer & audioPorts()
Definition: component_implementation.hpp:108
Definition: component.hpp:38
Definition: options.cpp:10
ParameterPortContainer const & parameterPorts() const
Definition: component_implementation.hpp:121
std::vector< PortType * > PortContainer
Definition: component_implementation.hpp:98
PortContainer< PortType >::const_iterator portBegin() const
Definition: component_implementation.hpp:160
ParameterPortContainer & parameterPorts()
Definition: component_implementation.hpp:123
static const std::string cNameSeparator
Definition: component_implementation.hpp:62
AudioPortContainer::const_iterator audioPortBegin() const
Definition: component_implementation.hpp:110
PortContainer< AudioPortBaseImplementation > AudioPortContainer
Definition: component_implementation.hpp:100
Definition: signal_flow_context.hpp:15
PortContainer< PortType >::iterator portEnd()
Definition: component_implementation.hpp:158
CompositeComponentImplementation const * parent() const
Definition: component_implementation.hpp:238
PortContainer< ParameterPortBaseImplementation > ParameterPortContainer
Definition: component_implementation.hpp:119
bool isTopLevel() const
Definition: component_implementation.hpp:226
Definition: parameter_port_base.hpp:29
visr::Component & component()
Definition: component_implementation.hpp:246
visr::Component const & component() const
Definition: component_implementation.hpp:248
std::size_t SamplingFrequencyType
Definition: constants.hpp:19