OpenDDS  Snapshot(2023/04/28-20:55)
SubscriptionInstance.cpp
Go to the documentation of this file.
1 /*
2  * Distributed under the OpenDDS License.
3  * See: http://www.opendds.org/license.html
4  */
5 
6 #include "DCPS/DdsDcps_pch.h" //Only the _pch include should start with DCPS/
7 
8 #include "SubscriptionInstance.h"
9 
10 #include "DataReaderImpl.h"
11 
13 
14 namespace OpenDDS {
15 namespace DCPS {
16 
18  const DDS::DataReaderQos& qos,
20  DDS::InstanceHandle_t handle,
21  bool owns_handle)
22  : instance_state_(make_rch<InstanceState>(ref(reader), ref(lock), handle))
23  , rcvd_samples_(reader, instance_state_)
24  , read_sample_count_(0)
25  , not_read_sample_count_(0)
26  , sample_states_(0)
27  , instance_handle_(handle)
28  , owns_handle_(owns_handle)
29 {
30  switch (qos.destination_order.kind) {
33  break;
34 
37  break;
38  }
39 
40  if (!rcvd_strategy_) {
42  ACE_TEXT("(%P|%t) ERROR: SubscriptionInstance: ")
43  ACE_TEXT("unable to allocate ReceiveDataStrategy!\n")));
44  }
45 }
46 
48 {
49  if (owns_handle_) {
51  if (reader) {
52  reader->return_handle(instance_handle_);
53  }
54  }
55 }
56 
58 {
59  return instance_state_->match(view_states, instance_states) && rcvd_samples_.matches(sample_states);
60 }
61 
62 }
63 }
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:72
manage the states of a received data instance.
Definition: InstanceState.h:49
#define ACE_ERROR(X)
WeakRcHandle< DataReaderImpl > data_reader() const
bool matches(CORBA::ULong sample_states, CORBA::ULong view_states, CORBA::ULong instance_states) const
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:72
RcHandle< T > make_rch()
Definition: RcHandle_T.h:256
DestinationOrderQosPolicy destination_order
reference_wrapper< T > ref(T &r)
Definition: RcHandle_T.h:237
unique_ptr< ReceivedDataStrategy > rcvd_strategy_
ReceivedDataElementList strategy.
DestinationOrderQosPolicyKind kind
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:72
SubscriptionInstance(const DataReaderImpl_rch &reader, const DDS::DataReaderQos &qos, ACE_Recursive_Thread_Mutex &lock, DDS::InstanceHandle_t handle, bool owns_handle)
ACE_CDR::ULong ULong
HANDLE_TYPE_NATIVE InstanceHandle_t
Definition: DdsDcpsCore.idl:51
ACE_TEXT("TCP_Factory")
bool match(DDS::ViewStateMask view, DDS::InstanceStateMask inst) const
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
ReceivedDataElementList rcvd_samples_
Data sample(s) in this instance.
RcHandle< T > lock() const
Definition: RcObject.h:188
bool matches(CORBA::ULong sample_states) const
const InstanceState_rch instance_state_
Instance state for this instance.
LM_ERROR
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
const DDS::InstanceHandle_t instance_handle_
The instance handle for the registered object.