VISR  0.11.6
Versatile Interactive Scene Renderer
parameter_output.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_PARAMETER_OUTPUT_HPP_INCLUDED
4 #define VISR_PARAMETER_OUTPUT_HPP_INCLUDED
5 
7 
10 #include "export_symbols.hpp"
11 #include "parameter_type.hpp"
12 
13 #include <ciso646>
14 #include <stdexcept>
15 
16 namespace visr
17 {
18 
19 class VISR_CORE_LIBRARY_SYMBOL ParameterOutputBase: public ParameterPortBase
20 {
21 public:
22  explicit ParameterOutputBase( char const * name,
23  Component & parent,
24  ParameterType const & parameterType,
25  CommunicationProtocolType const & protocolType,
26  ParameterConfigBase const & paramConfig );
27 
28  explicit ParameterOutputBase( char const * name,
29  Component & parent,
30  ParameterType const & parameterType,
31  CommunicationProtocolType const & protocolType );
32 
33  virtual ~ParameterOutputBase() override;
34 
35  virtual CommunicationProtocolBase::Output & protocolOutput() = 0;
36 
38 };
39 
44 template< class ProtocolT, class ParameterT >
46  public ProtocolT::template Output<ParameterT>
47 {
48 public:
50 
51  template<typename ... ProtocolArgs>
52  explicit ParameterOutput( char const * name,
53  Component & parent,
54  ParameterConfigType const & paramConfig,
55  ProtocolArgs ... protoArgs );
56 
57  template<typename ... ProtocolArgs>
58  explicit ParameterOutput( char const * name,
59  Component & parent,
60  ProtocolArgs ... protoArgs );
61 
62 
66  /*virtual*/ ~ParameterOutput();
67 
69  {
70  return *this; // cast to protocol input type.
71  };
72 
74  {
76  }
77 
79  {
81  }
82 
84  {
86  }
87 
94  {
96  }
97 
98 protected:
99  void setProtocol( CommunicationProtocolBase * protocol ) override
100  {
101  ProtocolT * typedProtocol
102  = dynamic_cast< ProtocolT * >(protocol);
103  if( not typedProtocol )
104  {
105  throw std::invalid_argument( "ParameterOutput::setProtocol(): Protocol class type does not match the protocol type for this port." );
106  }
107  this->setProtocolInstance( typedProtocol );
108  }
109 private:
110 };
111 
112 template< class ProtocolT, class ParameterT >
113 template<typename ... ProtocolArgs>
115 ParameterOutput( char const * name,
116  Component & parent,
117  ParameterConfigType const & paramConfig,
118  ProtocolArgs ... protoArgs )
119  : ParameterOutputBase( name, parent,
120  ParameterToId<ParameterT>::id,
121  CommunicationProtocolToId<ProtocolT>::id,
122  paramConfig )
123  , ProtocolT::template Output<ParameterT>(protoArgs...)
124 {
125 }
126 
127 template< class ProtocolT, class ParameterT >
128 template<typename ... ProtocolArgs>
130 ParameterOutput( char const * name,
131  Component & parent,
132  ProtocolArgs ... protoArgs )
133  : ParameterOutputBase( name, parent,
134  ParameterToId<ParameterT>::id,
135  CommunicationProtocolToId<ProtocolT>::id )
136  , ProtocolT::template Output<ParameterT>( protoArgs... )
137 {
138 }
139 
140 template<class ProtocolT, class ParameterT >
142 {
143 }
144 
145 } // namespace visr
146 
147 #endif // #ifndef VISR_PARAMETER_OUTPUT_HPP_INCLUDED
Definition: communication_protocol_type.hpp:29
Definition: parameter_output.hpp:45
ParameterType parameterType() const
Definition: parameter_output.hpp:73
uint64_t ParameterType
Definition: parameter_type.hpp:13
Definition: parameter_type.hpp:43
Definition: parameter_output.hpp:19
~ParameterOutput()
Definition: parameter_output.hpp:141
std::uint64_t CommunicationProtocolType
Definition: communication_protocol_type.hpp:14
CommunicationProtocolBase::Output & protocolOutput() override
Definition: parameter_output.hpp:68
Definition: component.hpp:38
ParameterOutput(char const *name, Component &parent, ParameterConfigType const &paramConfig, ProtocolArgs ... protoArgs)
Definition: parameter_output.hpp:115
Definition: options.cpp:10
Definition: parameter_config_base.hpp:22
typename ParameterToConfigType< visr::pml::VectorParameter< Afloat > >::ConfigType ParameterConfigType
Definition: parameter_output.hpp:49
Definition: communication_protocol_base.hpp:21
ParameterConfigBase const & parameterConfig() const
Definition: parameter_port_base.cpp:57
void setParameterConfig(ParameterConfigType const &parameterConfig)
Definition: parameter_output.hpp:93
Definition: parameter_port_base.hpp:29
void setProtocol(CommunicationProtocolBase *protocol) override
Definition: parameter_output.hpp:99
void setParameterConfig(ParameterConfigBase const &parameterConfig)
Definition: parameter_port_base.cpp:32
Definition: parameter_type.hpp:27
CommunicationProtocolType protocolType() const
Definition: parameter_output.hpp:78
ParameterConfigBase const & parameterConfig() const
Definition: parameter_output.hpp:83
Definition: communication_protocol_base.hpp:131