Fast RTPS  Version 2.4.0
Fast RTPS
SubscriberHistory.h
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 SUBSCRIBERHISTORY_H_
21 #define SUBSCRIBERHISTORY_H_
22 #ifndef DOXYGEN_SHOULD_SKIP_THIS_PUBLIC
23 
24 #include <fastdds/dds/topic/TopicDataType.hpp>
25 #include <fastdds/rtps/resources/ResourceManagement.h>
26 #include <fastrtps/qos/ReaderQos.h>
27 #include <fastdds/rtps/history/ReaderHistory.h>
28 #include <fastrtps/qos/QosPolicies.h>
29 #include <fastrtps/common/KeyedChanges.h>
30 #include <fastrtps/subscriber/SampleInfo.h>
31 #include <fastrtps/attributes/TopicAttributes.h>
32 
33 #include <chrono>
34 #include <functional>
35 
36 namespace eprosima {
37 namespace fastrtps {
38 
43 class SubscriberHistory : public rtps::ReaderHistory
44 {
45 public:
46 
47  using instance_info = std::pair<rtps::InstanceHandle_t, std::vector<rtps::CacheChange_t*>*>;
48 
58  const TopicAttributes& topic_att,
59  fastdds::dds::TopicDataType* type,
60  const fastrtps::ReaderQos& qos,
61  uint32_t payloadMax,
62  rtps::MemoryManagementPolicy_t mempolicy);
63 
64  ~SubscriberHistory() override;
65 
74  const_iterator removal,
75  bool release = true) override;
76 
85  rtps::CacheChange_t* change,
86  size_t unknown_missing_changes_up_to) override;
87 
97  void* data,
98  SampleInfo_t* info,
99  std::chrono::steady_clock::time_point& max_blocking_time);
100 
102  void* data,
103  SampleInfo_t* info,
104  std::chrono::steady_clock::time_point& max_blocking_time);
106 
113  SampleInfo_t* info);
114 
121  rtps::CacheChange_t* change);
122 
130  rtps::CacheChange_t* change,
131  iterator& it);
132 
140  const rtps::InstanceHandle_t& handle,
141  const std::chrono::steady_clock::time_point& next_deadline_us);
142 
150  rtps::InstanceHandle_t& handle,
151  std::chrono::steady_clock::time_point& next_deadline_us);
152 
168  std::pair<bool, instance_info> lookup_instance(
169  const rtps::InstanceHandle_t& handle,
170  bool exact);
171 
172 private:
173 
174  using t_m_Inst_Caches = std::map<rtps::InstanceHandle_t, KeyedChanges>;
175 
177  t_m_Inst_Caches keyed_changes_;
179  std::chrono::steady_clock::time_point next_deadline_us_;
181  HistoryQosPolicy history_qos_;
183  ResourceLimitsQosPolicy resource_limited_qos_;
185  TopicAttributes topic_att_;
187  fastdds::dds::TopicDataType* type_;
189  fastrtps::ReaderQos qos_;
190 
192  void* get_key_object_;
193 
195  std::function<bool(rtps::CacheChange_t*, size_t)> receive_fn_;
196 
203  bool find_key(
204  rtps::CacheChange_t* a_change,
205  t_m_Inst_Caches::iterator* map_it);
206 
213  bool find_key_for_change(
214  rtps::CacheChange_t* a_change,
215  t_m_Inst_Caches::iterator& map_it);
216 
225  bool received_change_keep_all_no_key(
226  rtps::CacheChange_t* change,
227  size_t unknown_missing_changes_up_to);
228 
229  bool received_change_keep_last_no_key(
230  rtps::CacheChange_t* change,
231  size_t unknown_missing_changes_up_to);
232 
233  bool received_change_keep_all_with_key(
234  rtps::CacheChange_t* change,
235  size_t unknown_missing_changes_up_to);
236 
237  bool received_change_keep_last_with_key(
238  rtps::CacheChange_t* change,
239  size_t unknown_missing_changes_up_to);
241 
242  bool add_received_change(
243  rtps::CacheChange_t* a_change);
244 
245  bool add_received_change_with_key(
246  rtps::CacheChange_t* a_change,
247  std::vector<rtps::CacheChange_t*>& instance_changes);
248 
249  bool deserialize_change(
250  rtps::CacheChange_t* change,
251  uint32_t ownership_strength,
252  void* data,
253  SampleInfo_t* info);
254 };
255 
256 } // namespace fastrtps
257 } // namespace eprosima
258 
259 #endif // ifndef DOXYGEN_SHOULD_SKIP_THIS_PUBLIC
260 
261 #endif /* SUBSCRIBERHISTORY_H_ */
Class SampleInfo_t with information that is provided along a sample when reading data from a Subscrib...
Definition: SampleInfo.h:39
Class SubscriberHistory, container of the different CacheChanges of a subscriber.
Definition: SubscriberHistory.h:44
bool received_change(rtps::CacheChange_t *change, size_t unknown_missing_changes_up_to) override
Called when a change is received by the Subscriber.
bool remove_change_sub(rtps::CacheChange_t *change)
This method is called to remove a change from the SubscriberHistory.
bool get_first_untaken_info(SampleInfo_t *info)
Returns information about the first untaken sample.
bool remove_change_sub(rtps::CacheChange_t *change, iterator &it)
This method is called to remove a change from the SubscriberHistory.
bool readNextData(void *data, SampleInfo_t *info, std::chrono::steady_clock::time_point &max_blocking_time)
bool get_next_deadline(rtps::InstanceHandle_t &handle, std::chrono::steady_clock::time_point &next_deadline_us)
A method to get the next instance handle that will miss the deadline and the time when the deadline w...
std::pair< bool, instance_info > lookup_instance(const rtps::InstanceHandle_t &handle, bool exact)
Get the list of changes corresponding to an instance handle.
SubscriberHistory(const TopicAttributes &topic_att, fastdds::dds::TopicDataType *type, const fastrtps::ReaderQos &qos, uint32_t payloadMax, rtps::MemoryManagementPolicy_t mempolicy)
Constructor.
bool takeNextData(void *data, SampleInfo_t *info, std::chrono::steady_clock::time_point &max_blocking_time)
bool set_next_deadline(const rtps::InstanceHandle_t &handle, const std::chrono::steady_clock::time_point &next_deadline_us)
A method to set the next deadline for the given instance.
iterator remove_change_nts(const_iterator removal, bool release=true) override
Remove a specific change from the history.
std::pair< rtps::InstanceHandle_t, std::vector< rtps::CacheChange_t * > * > instance_info
Definition: SubscriberHistory.h:47
Class TopicAttributes, used by the user to define the attributes of the topic associated with a Publi...
Definition: TopicAttributes.h:36
fastdds::dds::ReaderQos ReaderQos
Definition: ReaderQos.h:30
fastdds::dds::ResourceLimitsQosPolicy ResourceLimitsQosPolicy
Definition: QosPolicies.h:81
fastdds::dds::HistoryQosPolicy HistoryQosPolicy
Definition: QosPolicies.h:80
eProsima namespace.
Definition: LibrarySettingsAttributes.h:23