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(
56 RTI_LOG_BIT_EXCEPTION,
61 RTILog_printContextAndMsg(
62 RTI_LOG_BIT_EXCEPTION,
69 static RTI_RecordingServiceStorageStreamReader * create_stream_reader_fwd(
71 const struct RTI_RoutingServiceStreamInfo *native_stream_info,
72 const struct RTI_RoutingServiceProperties *native_properties)
75 StorageReaderForwarder *forwarder =
76 static_cast<StorageReaderForwarder *
>(storage_reader);
77 rti::routing::StreamInfo stream_info(*native_stream_info);
78 rti::routing::PropertySet properties;
79 rti::routing::PropertyAdapter::add_properties_from_native(
82 StorageStreamReaderForwarder *stream_reader_forwarder =
83 new StorageStreamReaderForwarder(
84 forwarder->storage_reader_->create_stream_reader(
87 forwarder->storage_reader_.get());
88 return stream_reader_forwarder;
89 }
catch (
const std::exception& ex) {
90 RTILog_printContextAndMsg(
91 RTI_LOG_BIT_EXCEPTION,
97 RTILog_printContextAndMsg(
98 RTI_LOG_BIT_EXCEPTION,
101 "unknown exception");
106 static void delete_stream_reader_fwd(
108 RTI_RecordingServiceStorageStreamReader *storage_stream_reader)
111 StorageStreamReaderForwarder *stream_reader_forwarder =
112 static_cast<StorageStreamReaderForwarder *
>(
113 storage_stream_reader);
114 delete stream_reader_forwarder;
115 }
catch (
const std::exception& ex) {
116 RTILog_printContextAndMsg(
117 RTI_LOG_BIT_EXCEPTION,
122 RTILog_printContextAndMsg(
123 RTI_LOG_BIT_EXCEPTION,
126 "unknown exception");
130 static RTI_RecordingServiceStorageStreamInfoReader *
131 create_stream_info_reader_fwd(
132 void *storage_reader_data,
133 const struct RTI_RoutingServiceProperties *native_properties)
136 StorageReaderForwarder *forwarder =
137 static_cast<StorageReaderForwarder *
>(storage_reader_data);
138 rti::routing::PropertySet properties;
139 rti::routing::PropertyAdapter::add_properties_from_native(
142 StorageStreamInfoReaderForwarder *disc_reader_forwarder =
143 new StorageStreamInfoReaderForwarder(
144 forwarder->storage_reader_->create_stream_info_reader(
146 forwarder->storage_reader_.get());
147 return disc_reader_forwarder;
148 }
catch (
const std::exception& ex) {
149 RTILog_printContextAndMsg(
150 RTI_LOG_BIT_EXCEPTION,
156 RTILog_printContextAndMsg(
157 RTI_LOG_BIT_EXCEPTION,
160 "unknown exception");
165 static void delete_stream_info_reader_fwd(
167 RTI_RecordingServiceStorageStreamInfoReader *stream_info_reader)
170 StorageStreamInfoReaderForwarder *disc_reader_forwarder =
171 static_cast<StorageStreamInfoReaderForwarder *
>(
173 delete disc_reader_forwarder;
174 }
catch (
const std::exception& ex) {
175 RTILog_printContextAndMsg(
176 RTI_LOG_BIT_EXCEPTION,
181 RTILog_printContextAndMsg(
182 RTI_LOG_BIT_EXCEPTION,
185 "unknown exception");
191 rtiboost::shared_ptr<StorageReader> storage_reader_;
197 #endif // RTI_RECORDING_STORAGE_DETAIL_STORAGE_WRITER_FORWARDER_HPP_