11#ifndef RTI_ROUTING_DETAIL_FORWARDER_UTILS_UTILS_HPP_
12#define RTI_ROUTING_DETAIL_FORWARDER_UTILS_UTILS_HPP_
16#include <dds/topic/Topic.hpp>
17#include <rti/core/Exception.hpp>
18#include <routingservice/routingservice_infrastructure.h>
20namespace rti {
namespace routing {
namespace detail {
22#define RTI_ROUTING_THROW_ON_NULL(pointer) \
23 if ((pointer) == NULL) { \
24 throw dds::core::Error("invalid return of NULL"); \
27#define RTI_ROUTING_THROW_ON_ENV_ERROR(NATIVE_ENV) \
28 if (RTI_RoutingServiceEnvironment_error_occurred((NATIVE_ENV))) { \
29 dds::core::Error rex( \
30 RTI_RoutingServiceEnvironment_get_error_message((NATIVE_ENV))); \
31 RTI_RoutingServiceEnvironment_clear_error((NATIVE_ENV)); \
35#define RTI_ROUTING_SAMPLE_VECTOR_COPY_FROM_NATIVE( \
39 (VECTOR).resize((ARRAY_LENGTH)); \
40 memcpy(&((VECTOR)[0]), \
42 sizeof (void*) * (ARRAY_LENGTH));
44#define RTI_ROUTING_SAMPLE_VECTOR_COPY_FROM_NATIVE_W_OFFSET( \
49 (VECTOR).resize((ARRAY_LENGTH) + (OFFSET)); \
50 memcpy(&((VECTOR)[OFFSET]), \
52 sizeof (void*) * (ARRAY_LENGTH));
55#define RTI_ROUTING_SAMPLE_VECTOR_COPY_PTRS( \
58 (TO_VECTOR).resize((FROM_VECTOR).size()); \
59 if ((FROM_VECTOR).size() > 0) { \
63 sizeof(void*) * (FROM_VECTOR).size()); \
67template <
typename OwnerType,
typename ForwarderType>
68struct ScopedForwarder {
72 ForwarderType *forwarder,
73 RTI_RoutingServiceEnvironment *environment)
74 :owner_(owner), forwarder_(forwarder), environment_(environment)
85 if (forwarder_ != NULL) {
86 ForwarderType::delete_native(
96 ForwarderType *forwarder_;
97 RTI_RoutingServiceEnvironment *environment_;