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)
83 StorageStreamReaderForwarder *forwarder =
84 static_cast<StorageStreamReaderForwarder *
>(
86 forwarder->storage_stream_reader_->read(
87 forwarder->sample_seq_,
89 SelectorState(*native_selector));
90 *array_length = forwarder->sample_seq_.size();
91 if (*array_length > 0) {
92 *sample_array = forwarder->sample_seq_.data();
93 *sample_info_array = forwarder->info_seq_.data();
95 }
catch (
const std::exception& ex) {
96 RTILog_printContextAndMsg(
97 RTI_LOG_BIT_EXCEPTION,
102 RTILog_printContextAndMsg(
103 RTI_LOG_BIT_EXCEPTION,
106 "unknown exception");
110 static void return_loan_fwd(
111 void *stream_reader_data,
112 RTI_RoutingServiceSample *sample_array,
113 RTI_RoutingServiceSampleInfo *sample_info_array,
116 RTIOsapiUtility_unusedParameter(sample_array);
117 RTIOsapiUtility_unusedParameter(sample_info_array);
118 RTIOsapiUtility_unusedParameter(array_length);
121 StorageStreamReaderForwarder *forwarder =
122 static_cast<StorageStreamReaderForwarder *
>(
126 forwarder->storage_stream_reader_->return_loan(
127 forwarder->sample_seq_,
128 forwarder->info_seq_);
130 forwarder->sample_seq_.clear();
131 forwarder->info_seq_.clear();
132 }
catch (
const std::exception& ex) {
133 RTILog_printContextAndMsg(
134 RTI_LOG_BIT_EXCEPTION,
139 RTILog_printContextAndMsg(
140 RTI_LOG_BIT_EXCEPTION,
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(
158 RTI_LOG_BIT_EXCEPTION,
163 RTILog_printContextAndMsg(
164 RTI_LOG_BIT_EXCEPTION,
167 "unknown exception");
172 static void reset_fwd(
void *stream_reader_data)
175 StorageStreamReaderForwarder *forwarder =
176 static_cast<StorageStreamReaderForwarder *
>(
178 forwarder->storage_stream_reader_->reset();
179 }
catch (
const std::exception& ex) {
180 RTILog_printContextAndMsg(
181 RTI_LOG_BIT_EXCEPTION,
186 RTILog_printContextAndMsg(
187 RTI_LOG_BIT_EXCEPTION,
190 "unknown exception");
194 StorageStreamReader * stream_reader()
196 return storage_stream_reader_.get();
200 rtiboost::shared_ptr<StorageStreamReader> storage_stream_reader_;
202 std::vector<StorageStreamReader::SamplePtr> sample_seq_;
203 std::vector<StorageStreamReader::InfoPtr> info_seq_;
209 #endif // RTI_RECORDING_STORAGE_DETAIL_STORAGE_STREAM_READER_FORWARDER_HPP_