11 #ifndef RTI_RECORDING_STORAGE_DETAIL_STORAGE_STREAM_READER_FORWARDER_HPP_
12 #define RTI_RECORDING_STORAGE_DETAIL_STORAGE_STREAM_READER_FORWARDER_HPP_
17 #include "log/log_common.h"
18 #include "recordingservice/recordingservice_storagereader.h"
20 #include "rtiboost/smart_ptr/shared_ptr.hpp"
21 #include "rti/routing/detail/ForwarderUtils.hpp"
24 #include "rti/recording/storage/StorageStreamReader.hpp"
25 #include "rti/recording/storage/SelectorState.hpp"
27 namespace rti {
namespace recording {
namespace storage {
namespace detail {
37 : storage_reader_parent_(storage_reader_parent)
39 RTIBOOST_ASSERT(storage_reader_parent != NULL);
44 RTIBOOST_ASSERT(stream_reader_instance != NULL);
46 stream_reader_instance);
53 class StorageStreamReaderForwarder :
54 public RTI_RecordingServiceStorageStreamReader {
57 StorageStreamReaderForwarder(
60 : storage_stream_reader_(
64 read = StorageStreamReaderForwarder::read_fwd;
65 return_loan = StorageStreamReaderForwarder::return_loan_fwd;
66 finished = StorageStreamReaderForwarder::finished_fwd;
67 reset = StorageStreamReaderForwarder::reset_fwd;
68 stream_reader_data =
this;
71 ~StorageStreamReaderForwarder()
76 void *stream_reader_data,
77 RTI_RoutingServiceSample **sample_array,
78 RTI_RoutingServiceSampleInfo **sample_info_array,
80 const struct RTI_RecordingServiceSelectorState *native_selector)
82 RTIOsapiUtility_unusedParameter(sample_array);
83 RTIOsapiUtility_unusedParameter(sample_info_array);
84 RTIOsapiUtility_unusedParameter(array_length);
87 StorageStreamReaderForwarder *forwarder =
88 static_cast<StorageStreamReaderForwarder *
>(
90 forwarder->storage_stream_reader_->read(
91 forwarder->sample_seq_,
93 SelectorState(*native_selector));
94 *array_length = forwarder->sample_seq_.size();
95 if (*array_length > 0) {
96 *sample_array = forwarder->sample_seq_.data();
97 *sample_info_array = forwarder->info_seq_.data();
99 }
catch (
const std::exception& ex) {
100 RTILog_printContextAndMsg(
105 RTILog_printContextAndMsg(
108 "unknown exception");
112 static void return_loan_fwd(
113 void *stream_reader_data,
114 RTI_RoutingServiceSample *sample_array,
115 RTI_RoutingServiceSampleInfo *sample_info_array,
118 RTIOsapiUtility_unusedParameter(sample_array);
119 RTIOsapiUtility_unusedParameter(sample_info_array);
120 RTIOsapiUtility_unusedParameter(array_length);
123 StorageStreamReaderForwarder *forwarder =
124 static_cast<StorageStreamReaderForwarder *
>(
128 forwarder->storage_stream_reader_->return_loan(
129 forwarder->sample_seq_,
130 forwarder->info_seq_);
132 forwarder->sample_seq_.clear();
133 forwarder->info_seq_.clear();
134 }
catch (
const std::exception& ex) {
135 RTILog_printContextAndMsg(
140 RTILog_printContextAndMsg(
143 "unknown exception");
147 static int finished_fwd(
void *stream_reader_data)
150 StorageStreamReaderForwarder *forwarder =
151 static_cast<StorageStreamReaderForwarder *
>(
153 return (forwarder->storage_stream_reader_->finished() ?
156 }
catch (
const std::exception& ex) {
157 RTILog_printContextAndMsg(
162 RTILog_printContextAndMsg(
165 "unknown exception");
170 static void reset_fwd(
void *stream_reader_data)
173 StorageStreamReaderForwarder *forwarder =
174 static_cast<StorageStreamReaderForwarder *
>(
176 forwarder->storage_stream_reader_->reset();
177 }
catch (
const std::exception& ex) {
178 RTILog_printContextAndMsg(
183 RTILog_printContextAndMsg(
186 "unknown exception");
190 StorageStreamReader * stream_reader()
192 return storage_stream_reader_.get();
196 rtiboost::shared_ptr<StorageStreamReader> storage_stream_reader_;
198 std::vector<StorageStreamReader::SamplePtr> sample_seq_;
199 std::vector<StorageStreamReader::InfoPtr> info_seq_;
205 #endif // RTI_RECORDING_STORAGE_DETAIL_STORAGE_STREAM_READER_FORWARDER_HPP_