11 #ifndef RTI_ROUTING_PROCESSOR_ROUTE_HPP_ 12 #define RTI_ROUTING_PROCESSOR_ROUTE_HPP_ 14 #include <dds/core/Value.hpp> 15 #include <dds/core/SafeEnumeration.hpp> 16 #include <rti/core/NativeValueType.hpp> 18 #include "routingservice/routingservice_processor.h" 19 #include "routingservice/routingservice_processor_impl.h" 21 #include <dds/core/xtypes/DynamicData.hpp> 22 #include <dds/sub/SampleInfo.hpp> 24 #include <rti/routing/processor/Input.hpp> 25 #include <rti/routing/processor/Output.hpp> 26 #include <rti/routing/processor/LoanedSamples.hpp> 27 #include <rti/routing/processor/PortIterator.hpp> 29 namespace rti {
namespace routing {
namespace processor {
33 class ProcessorForwarder;
39 template <
typename PORT>
struct port_list;
41 template <>
struct port_list<Input>
43 static std::vector<Input>&
get(Route& route);
46 template <>
struct port_list<Output>
48 static std::vector<Output>&
get(Route& route);
88 template <
typename DataRep,
typename InfoRep = dds::sub::SampleInfo>
90 typedef PortIterator<Input, DataRep, InfoRep> iterator;
92 Inputs(RTI_RoutingServiceRoute *native_route)
93 : native_route_(native_route)
99 return iterator(native_route_);
108 RTI_RoutingServiceRoute *native_route_;
111 template <
typename DataRep,
typename InfoRep = dds::sub::SampleInfo>
113 typedef PortIterator<Output, DataRep, InfoRep> iterator;
115 Outputs(RTI_RoutingServiceRoute *native_route)
116 : native_route_(native_route)
122 return iterator(native_route_);
131 RTI_RoutingServiceRoute *native_route_;
141 return RTI_RoutingServiceRoute_get_input_count(native_route_);
150 return RTI_RoutingServiceRoute_get_output_count(native_route_);
159 return RTI_RoutingServiceRoute_is_input_enabled(native_route_, index)
170 return RTI_RoutingServiceRoute_is_output_enabled(native_route_, index)
195 return *(get_input_at_index(index));
210 return *(lookup_input(name));
234 template <
typename DataRep,
typename InfoRep>
237 return &input(index);
245 template <
typename DataRep>
248 return input<DataRep, dds::sub::SampleInfo>(index);
256 template <
typename DataRep,
typename InfoRep>
266 template <
typename DataRep>
269 return input<DataRep, dds::sub::SampleInfo>(name);
292 return *(get_output_at_index(index));
307 return *(lookup_output(name));
330 template <
typename DataRep,
typename InfoRep>
333 return &output(index);
341 template <
typename DataRep>
344 return output<DataRep, dds::sub::SampleInfo>(index);
352 template <
typename DataRep,
typename InfoRep>
355 return &output(name);
362 template <
typename DataRep>
365 return output<DataRep, dds::sub::SampleInfo>(name);
377 template <
typename DataRep,
typename InfoRep>
380 return Inputs<DataRep, InfoRep>(native_route_);
387 template <
typename DataRep>
390 return inputs<DataRep, dds::sub::SampleInfo>();
402 template <
typename DataRep,
typename InfoRep>
405 return Outputs<DataRep, InfoRep>(native_route_);
412 template <
typename DataRep>
415 return outputs<DataRep, dds::sub::SampleInfo>();
431 void period(
const dds::core::Duration& period)
433 struct DDS_Duration_t native_period;
434 rti::core::native_conversions::to_native(native_period, period);
435 RTI_RoutingServiceRoute_set_period(
440 dds::core::Duration period()
const 442 struct DDS_Duration_t native_period;
443 RTI_RoutingServiceRoute_get_period(
447 return rti::core::native_conversions::from_native(native_period);
462 friend class detail::ProcessorForwarder;
464 friend struct port_list<Input>;
465 friend struct port_list<Output>;
467 typedef std::vector<Input>::iterator private_input_it;
468 typedef std::vector<Output>::iterator private_output_it;
472 Route(RTI_RoutingServiceRoute *native_route,
473 RTI_RoutingServiceEnvironment *native_env)
474 : native_route_(native_route),
475 native_env_(native_env),
476 full_name_(RTI_RoutingServiceRoute_get_full_name(native_route))
480 Input* get_input_at_index(int32_t index)
482 RTI_RoutingServiceInput *native_input =
483 RTI_RoutingServiceRoute_get_input_at(native_route_, index);
484 if (native_input == NULL) {
485 throw dds::core::InvalidArgumentError(
486 RTI_RoutingServiceEnvironment_get_error_message(native_env_));
489 return static_cast<Input*
>(RTI_RoutingServiceInput_get_user_data(native_input));
492 Output* get_output_at_index(int32_t index)
494 RTI_RoutingServiceOutput *native_output =
495 RTI_RoutingServiceRoute_get_output_at(native_route_, index);
496 if (native_output == NULL) {
497 throw dds::core::InvalidArgumentError(
498 RTI_RoutingServiceEnvironment_get_error_message(native_env_));
501 return static_cast<Output*
>(RTI_RoutingServiceOutput_get_user_data(native_output));
505 Input* lookup_input(
const std::string& name)
507 RTI_RoutingServiceInput *native_input =
508 RTI_RoutingServiceRoute_lookup_input_by_name(
511 if (native_input == NULL) {
512 throw dds::core::InvalidArgumentError(
513 RTI_RoutingServiceEnvironment_get_error_message(native_env_));
515 return static_cast<Input*
>(RTI_RoutingServiceInput_get_user_data(native_input));
519 Output* lookup_output(
const std::string& name)
521 RTI_RoutingServiceOutput *native_output =
522 RTI_RoutingServiceRoute_lookup_output_by_name(
525 if (native_output == NULL) {
526 throw dds::core::InvalidArgumentError(
527 RTI_RoutingServiceEnvironment_get_error_message(native_env_));
529 return static_cast<Output*
>(RTI_RoutingServiceOutput_get_user_data(native_output));
534 RTI_RoutingServiceRoute *native_route_;
535 RTI_RoutingServiceEnvironment *native_env_;
536 std::string full_name_;
543 #endif // RTI_ROUTING_PROCESSOR_ROUTE_HPP_ TypedOutput< DataRep > output(const std::string &name)
Same as output<DataRep, InfoRep>(std::string&) with InfoRep = dds::sub::SampleInfo.
Definition: Route.hpp:363
TypedOutput< DataRep > output(int32_t index)
Same as output<DataRep, InfoRep>(int32_t) with InfoRep = dds::sub::SampleInfo.
Definition: Route.hpp:342
int32_t output_count() const
Returns the total number of outputs in this Route.
Definition: Route.hpp:148
bool input_enabled(int32_t index) const
Checks whether the Input at the specified index is enabled.
Definition: Route.hpp:157
Representation of an Output whose data representation is DataRep, whose info representation is InfoRe...
Definition: Output.hpp:28
TypedInput< DataRep > input(const std::string &name)
Same as input<DataRep, InfoRep>(std::string&) with InfoRep = dds::sub::SampleInfo.
Definition: Route.hpp:267
Representation of the Route object that owns a Processor.
Definition: Route.hpp:84
TypedInput< DataRep, InfoRep > input(const std::string &name)
Same as input<DataRep, InfoRep>(int32_t) but using the configuration name of the input.
Definition: Route.hpp:257
Outputs< DataRep > outputs()
Same as Inputs<DataRep, InfoRep> outputs() with InfoRep = dds::sub::SampleInfo.
Definition: Route.hpp:413
TypedOutput< DataRep, InfoRep > output(const std::string &name)
Same as output<DataRep, InfoRep>(int32_t) but using the configuration name of the output...
Definition: Route.hpp:353
bool output_enabled(int32_t index) const
Checks whether the Input at the specified index is enabled.
Definition: Route.hpp:168
Inputs< DataRep > inputs()
Same as Inputs<DataRep, InfoRep> inputs() with InfoRep = dds::sub::SampleInfo.
Definition: Route.hpp:388
TypedOutput< DataRep, InfoRep > output(int32_t index)
Returns the TypedOutput object at the specified index.
Definition: Route.hpp:331
void period(const dds::core::Duration &period)
Changes the event period of this Route.
Definition: Route.hpp:431
TypedInput< DataRep > input(int32_t index)
Same as input<DataRep, InfoRep>(int32_t) with InfoRep = dds::sub::SampleInfo.
Definition: Route.hpp:246
Inputs< DataRep, InfoRep > inputs()
Returns an accessor for the contained inputs.
Definition: Route.hpp:378
Definition: AdapterPlugin.hpp:25
Input & input(const std::string &name)
Returns the Input object with the specified name.
Definition: Route.hpp:208
const std::string & full_name() const
Returns the fully qualified of this Route, derived from the configuration.
Definition: Route.hpp:455
int32_t input_count() const
Returns the total number of inputs in this Route.
Definition: Route.hpp:139
Generic Representation of a Route's output.
Definition: Output.hpp:44
Outputs< DataRep, InfoRep > outputs()
Returns an accessor for the contained outputs.
Definition: Route.hpp:403
TypedInput< DataRep, InfoRep > input(int32_t index)
Returns the TypedInput object at the specified index.
Definition: Route.hpp:235
Output & output(const std::string &name)
Returns the Output object with the specified name.
Definition: Route.hpp:305
RTI Routing Service C++ Adapter API.
Output & output(int32_t index)
Returns the Output object at the specified index.
Definition: Route.hpp:290
Input & input(int32_t index)
Returns the Input object at the specified index.
Definition: Route.hpp:193