Fast DDS  Version 3.1.0
Fast DDS
Loading...
Searching...
No Matches
ReaderHistory.hpp
1// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
20#ifndef FASTDDS_RTPS_HISTORY__READERHISTORY_HPP
21#define FASTDDS_RTPS_HISTORY__READERHISTORY_HPP
22
23#include <fastdds/rtps/history/History.hpp>
24#include <fastdds/rtps/common/CacheChange.hpp>
25#include <fastdds/dds/core/status/SampleRejectedStatus.hpp>
26
27namespace eprosima {
28namespace fastdds {
29namespace rtps {
30
31class WriterProxy;
32class RTPSReader;
33
38class ReaderHistory : public History
39{
40 friend class RTPSReader;
41
43 ReaderHistory&&) = delete;
44 ReaderHistory& operator =(
45 ReaderHistory&&) = delete;
46
47public:
48
52 FASTDDS_EXPORTED_API ReaderHistory(
53 const HistoryAttributes& att);
54 FASTDDS_EXPORTED_API ~ReaderHistory() override;
55
70 FASTDDS_EXPORTED_API virtual bool can_change_be_added_nts(
71 const GUID_t& writer_guid,
72 uint32_t total_payload_size,
73 size_t unknown_missing_changes_up_to,
74 bool& will_never_be_accepted) const;
75
85 FASTDDS_EXPORTED_API virtual bool received_change(
86 CacheChange_t* change,
87 size_t unknown_missing_changes_up_to);
88
99 FASTDDS_EXPORTED_API virtual bool received_change(
100 CacheChange_t* change,
101 size_t unknown_missing_changes_up_to,
103 {
104 rejection_reason = fastdds::dds::NOT_REJECTED;
105 return received_change(change, unknown_missing_changes_up_to);
106 }
107
114 FASTDDS_EXPORTED_API bool virtual completed_change(
115 rtps::CacheChange_t* change)
116 {
117 (void)change;
118 return true;
119 }
120
129 FASTDDS_EXPORTED_API virtual bool completed_change(
130 CacheChange_t* change,
131 size_t unknown_missing_changes_up_to,
133 {
134 (void)change;
135 (void)unknown_missing_changes_up_to;
136 (void)rejection_reason;
137 return true;
138 }
139
145 FASTDDS_EXPORTED_API bool add_change(
146 CacheChange_t* a_change);
147
155 FASTDDS_EXPORTED_API iterator remove_change_nts(
156 const_iterator removal,
157 bool release = true) override;
158
167 FASTDDS_EXPORTED_API iterator remove_change_nts(
168 const_iterator removal,
169 const std::chrono::time_point<std::chrono::steady_clock>& max_blocking_time,
170 bool release = true) override;
171
178 FASTDDS_EXPORTED_API bool matches_change(
179 const CacheChange_t* inner,
180 CacheChange_t* outer) override;
181
184
190 FASTDDS_EXPORTED_API bool remove_changes_with_guid(
191 const GUID_t& a_guid);
192
200 const SequenceNumber_t& seq_num,
201 const GUID_t& writer_guid);
202
203 FASTDDS_EXPORTED_API bool get_min_change_from(
204 CacheChange_t** min_change,
205 const GUID_t& writerGuid);
206
216 FASTDDS_EXPORTED_API virtual void writer_unmatched(
217 const GUID_t& writer_guid,
218 const SequenceNumber_t& last_notified_seq);
219
226 FASTDDS_EXPORTED_API virtual void writer_update_its_ownership_strength_nts(
227 const GUID_t& writer_guid,
228 const uint32_t ownership_strength)
229 {
230 static_cast<void>(writer_guid);
231 static_cast<void>(ownership_strength);
232 }
233
234protected:
235
236 FASTDDS_EXPORTED_API void do_release_cache(
237 CacheChange_t* ch) override;
238
239 template<typename Pred>
241 Pred pred)
242 {
243 assert(nullptr != mp_reader);
244 assert(nullptr != mp_mutex);
245
246 std::lock_guard<RecursiveTimedMutex> guard(*mp_mutex);
247 std::vector<CacheChange_t*>::iterator chit = m_changes.begin();
248 while (chit != m_changes.end())
249 {
250 if (pred(*chit))
251 {
252 chit = remove_change_nts(chit);
253 }
254 else
255 {
256 ++chit;
257 }
258 }
259 }
260
263
264};
265
266} // namespace rtps
267} // namespace fastdds
268} // namespace eprosima
269
270#endif // FASTDDS_RTPS_HISTORY__READERHISTORY_HPP
Class HistoryAttributes, to specify the attributes of a WriterHistory or a ReaderHistory.
Definition HistoryAttributes.hpp:39
Class History, container of the different CacheChanges and the methods to access them.
Definition History.hpp:45
std::vector< CacheChange_t * >::iterator iterator
Definition History.hpp:58
FASTDDS_EXPORTED_API bool remove_change(CacheChange_t *ch)
Remove a specific change from the history.
std::vector< CacheChange_t * >::const_iterator const_iterator
Definition History.hpp:60
RecursiveTimedMutex * mp_mutex
Mutex for the History.
Definition History.hpp:269
std::vector< CacheChange_t * > m_changes
Vector of pointers to the CacheChange_t.
Definition History.hpp:263
Class RTPSReader, manages the reception of data from its matched writers.
Definition RTPSReader.hpp:54
Class ReaderHistory, container of the different CacheChanges of a reader.
Definition ReaderHistory.hpp:39
FASTDDS_EXPORTED_API ReaderHistory(const HistoryAttributes &att)
Constructor of the ReaderHistory.
FASTDDS_EXPORTED_API iterator remove_change_nts(const_iterator removal, const std::chrono::time_point< std::chrono::steady_clock > &max_blocking_time, bool release=true) override
Remove a specific change from the history.
FASTDDS_EXPORTED_API virtual bool completed_change(rtps::CacheChange_t *change)
Called when a fragmented change is received completely by the Subscriber.
Definition ReaderHistory.hpp:114
virtual FASTDDS_EXPORTED_API void writer_update_its_ownership_strength_nts(const GUID_t &writer_guid, const uint32_t ownership_strength)
This function should be called by reader if a writer updates its ownership strength.
Definition ReaderHistory.hpp:226
virtual FASTDDS_EXPORTED_API bool received_change(CacheChange_t *change, size_t unknown_missing_changes_up_to, fastdds::dds::SampleRejectedStatusKind &rejection_reason)
Virtual method that is called when a new change is received.
Definition ReaderHistory.hpp:99
FASTDDS_EXPORTED_API bool add_change(CacheChange_t *a_change)
Add a CacheChange_t to the ReaderHistory.
FASTDDS_EXPORTED_API bool get_min_change_from(CacheChange_t **min_change, const GUID_t &writerGuid)
FASTDDS_EXPORTED_API iterator remove_change_nts(const_iterator removal, bool release=true) override
Remove a specific change from the history.
FASTDDS_EXPORTED_API bool matches_change(const CacheChange_t *inner, CacheChange_t *outer) override
Criteria to search a specific CacheChange_t on history.
FASTDDS_EXPORTED_API void do_release_cache(CacheChange_t *ch) override
virtual FASTDDS_EXPORTED_API void writer_unmatched(const GUID_t &writer_guid, const SequenceNumber_t &last_notified_seq)
Called when a writer is unmatched from the reader holding this history.
FASTDDS_EXPORTED_API bool remove_changes_with_guid(const GUID_t &a_guid)
Remove all changes from the History that have a certain guid.
void remove_changes_with_pred(Pred pred)
Definition ReaderHistory.hpp:240
RTPSReader * mp_reader
Pointer to the reader.
Definition ReaderHistory.hpp:262
virtual FASTDDS_EXPORTED_API bool received_change(CacheChange_t *change, size_t unknown_missing_changes_up_to)
Virtual method that is called when a new change is received.
bool remove_fragmented_changes_until(const SequenceNumber_t &seq_num, const GUID_t &writer_guid)
Remove all fragmented changes from certain writer up to certain sequence number.
virtual FASTDDS_EXPORTED_API bool completed_change(CacheChange_t *change, size_t unknown_missing_changes_up_to, fastdds::dds::SampleRejectedStatusKind &rejection_reason)
Called when a fragmented change is received completely by the Subscriber.
Definition ReaderHistory.hpp:129
FASTDDS_EXPORTED_API ~ReaderHistory() override
virtual FASTDDS_EXPORTED_API bool can_change_be_added_nts(const GUID_t &writer_guid, uint32_t total_payload_size, size_t unknown_missing_changes_up_to, bool &will_never_be_accepted) const
Check if a new change can be added to this history.
SampleRejectedStatusKind
An enum with the possible values for the sample rejected reason.
Definition SampleRejectedStatus.hpp:32
@ NOT_REJECTED
Default value.
Definition SampleRejectedStatus.hpp:34
eProsima namespace.
Structure CacheChange_t, contains information on a specific CacheChange.
Definition CacheChange.hpp:78
Structure GUID_t, entity identifier, unique in DDS-RTPS Domain.
Definition Guid.hpp:40
Structure SequenceNumber_t, different for each change in the same writer.
Definition SequenceNumber.hpp:38