11 #ifndef RTI_RECORDING_STORAGE_DETAIL_STORAGE_READER_FORWARDER_HPP_
12 #define RTI_RECORDING_STORAGE_DETAIL_STORAGE_READER_FORWARDER_HPP_
15 #include "log/log_common.h"
17 #include "rti/routing/detail/ForwarderUtils.hpp"
18 #include "rti/routing/ServiceProperty.hpp"
20 #include "recordingservice/recordingservice_storagereader.h"
21 #include "rti/recording/storage/detail/StorageStreamReaderForwarder.hpp"
22 #include "StorageStreamInfoReaderForwarder.hpp"
24 namespace rti {
namespace recording {
namespace storage {
namespace detail {
26 class StorageReaderForwarder :
public RTI_RecordingServiceStorageReader {
30 : storage_reader_(storage_reader)
32 create_stream_reader = StorageReaderForwarder::create_stream_reader_fwd;
33 delete_stream_reader = StorageReaderForwarder::delete_stream_reader_fwd;
34 create_stream_info_reader =
35 StorageReaderForwarder::create_stream_info_reader_fwd;
36 delete_stream_info_reader =
37 StorageReaderForwarder::delete_stream_info_reader_fwd;
38 delete_instance = StorageReaderForwarder::delete_instance_fwd;
40 storage_reader_data =
this;
43 ~StorageReaderForwarder()
47 static void delete_instance_fwd(
48 struct RTI_RecordingServiceStorageReader *storage_reader)
51 StorageReaderForwarder *forwarder =
52 static_cast<StorageReaderForwarder *
>(storage_reader);
54 }
catch (
const std::exception& ex) {
55 RTILog_printContextAndMsg(
60 RTILog_printContextAndMsg(
67 static RTI_RecordingServiceStorageStreamReader * create_stream_reader_fwd(
69 const struct RTI_RoutingServiceStreamInfo *native_stream_info,
70 const struct RTI_RoutingServiceProperties *native_properties)
73 StorageReaderForwarder *forwarder =
74 static_cast<StorageReaderForwarder *
>(storage_reader);
75 rti::routing::StreamInfo stream_info(*native_stream_info);
76 rti::routing::PropertySet properties;
77 rti::routing::PropertyAdapter::add_properties_from_native(
80 StorageStreamReaderForwarder *stream_reader_forwarder =
81 new StorageStreamReaderForwarder(
82 forwarder->storage_reader_->create_stream_reader(
85 forwarder->storage_reader_.get());
86 return stream_reader_forwarder;
87 }
catch (
const std::exception& ex) {
88 RTILog_printContextAndMsg(
94 RTILog_printContextAndMsg(
102 static void delete_stream_reader_fwd(
104 RTI_RecordingServiceStorageStreamReader *storage_stream_reader)
107 StorageStreamReaderForwarder *stream_reader_forwarder =
108 static_cast<StorageStreamReaderForwarder *
>(
109 storage_stream_reader);
110 delete stream_reader_forwarder;
111 }
catch (
const std::exception& ex) {
112 RTILog_printContextAndMsg(
117 RTILog_printContextAndMsg(
120 "unknown exception");
124 static RTI_RecordingServiceStorageStreamInfoReader *
125 create_stream_info_reader_fwd(
126 void *storage_reader_data,
127 const struct RTI_RoutingServiceProperties *native_properties)
130 StorageReaderForwarder *forwarder =
131 static_cast<StorageReaderForwarder *
>(storage_reader_data);
132 rti::routing::PropertySet properties;
133 rti::routing::PropertyAdapter::add_properties_from_native(
136 StorageStreamInfoReaderForwarder *disc_reader_forwarder =
137 new StorageStreamInfoReaderForwarder(
138 forwarder->storage_reader_->create_stream_info_reader(
140 forwarder->storage_reader_.get());
141 return disc_reader_forwarder;
142 }
catch (
const std::exception& ex) {
143 RTILog_printContextAndMsg(
149 RTILog_printContextAndMsg(
152 "unknown exception");
157 static void delete_stream_info_reader_fwd(
159 RTI_RecordingServiceStorageStreamInfoReader *stream_info_reader)
162 StorageStreamInfoReaderForwarder *disc_reader_forwarder =
163 static_cast<StorageStreamInfoReaderForwarder *
>(
165 delete disc_reader_forwarder;
166 }
catch (
const std::exception& ex) {
167 RTILog_printContextAndMsg(
172 RTILog_printContextAndMsg(
175 "unknown exception");
181 rtiboost::shared_ptr<StorageReader> storage_reader_;
187 #endif // RTI_RECORDING_STORAGE_DETAIL_STORAGE_WRITER_FORWARDER_HPP_