OpenDDS  Snapshot(2023/04/07-19:43)
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | Friends | List of all members
OpenDDS::DCPS::SequenceNumber Class Reference

Sequence number abstraction. Only allows positive 64 bit values. More...

#include <SequenceNumber.h>

Public Types

typedef ACE_INT64 Value
 

Public Member Functions

 SequenceNumber (Value value=INITIAL_VALUE)
 Construct with a value, default to one (starting point). More...
 
SequenceNumberoperator++ ()
 Pre-increment. More...
 
SequenceNumber operator++ (int)
 Post-increment. More...
 
SequenceNumber previous () const
 
void setValue (Value value)
 
void setValue (ACE_INT32 high, ACE_UINT32 low)
 
Value getValue () const
 
bool operator< (const SequenceNumber &rvalue) const
 
bool operator== (const SequenceNumber &rvalue) const
 Derive a full suite of logical operations. More...
 
bool operator!= (const SequenceNumber &rvalue) const
 
bool operator>= (const SequenceNumber &rvalue) const
 
bool operator<= (const SequenceNumber &rvalue) const
 
bool operator> (const SequenceNumber &rvalue) const
 
ACE_INT32 getHigh () const
 
ACE_UINT32 getLow () const
 

Static Public Member Functions

static SequenceNumber SEQUENCENUMBER_UNKNOWN ()
 
static SequenceNumber ZERO ()
 

Static Public Attributes

static const Value MAX_VALUE = ACE_INT64_MAX
 
static const Value INITIAL_VALUE = 1
 
static const Value MIN_VALUE = 0
 
static const Value LOW_BASE = 0x0000000100000000LL
 

Private Member Functions

 SequenceNumber (ACE_INT32 high, ACE_UINT32 low)
 

Private Attributes

ACE_INT32 high_
 
ACE_UINT32 low_
 

Friends

ACE_CDR::Boolean operator>> (Serializer &s, SequenceNumber &x)
 

Detailed Description

Sequence number abstraction. Only allows positive 64 bit values.

Definition at line 27 of file SequenceNumber.h.

Member Typedef Documentation

◆ Value

Definition at line 29 of file SequenceNumber.h.

Constructor & Destructor Documentation

◆ SequenceNumber() [1/2]

OpenDDS::DCPS::SequenceNumber::SequenceNumber ( Value  value = INITIAL_VALUE)
inline

Construct with a value, default to one (starting point).

Definition at line 31 of file SequenceNumber.h.

References value.

31  {
32  setValue(value);
33  }
const LogLevel::Value value
Definition: debug.cpp:61

◆ SequenceNumber() [2/2]

OpenDDS::DCPS::SequenceNumber::SequenceNumber ( ACE_INT32  high,
ACE_UINT32  low 
)
inlineprivate

Definition at line 148 of file SequenceNumber.h.

149  : high_(high), low_(low) {
150  }

Member Function Documentation

◆ getHigh()

ACE_INT32 OpenDDS::DCPS::SequenceNumber::getHigh ( ) const
inline

Definition at line 121 of file SequenceNumber.h.

Referenced by OpenDDS::DCPS::operator<<(), and OpenDDS::RTPS::to_rtps_seqnum().

121  {
122  return high_;
123  }

◆ getLow()

ACE_UINT32 OpenDDS::DCPS::SequenceNumber::getLow ( ) const
inline

Definition at line 124 of file SequenceNumber.h.

Referenced by OpenDDS::DCPS::operator<<(), and OpenDDS::RTPS::to_rtps_seqnum().

124  {
125  return low_;
126  }

◆ getValue()

Value OpenDDS::DCPS::SequenceNumber::getValue ( ) const
inline

Definition at line 92 of file SequenceNumber.h.

Referenced by OpenDDS::DCPS::TcpDataLink::ack_received(), OpenDDS::DCPS::DisjointSequence::bitmap_num_longs(), OpenDDS::DCPS::RtpsUdpDataLink::bundle_and_send_submessages(), OpenDDS::DCPS::BestEffortSession::check_header(), OpenDDS::DCPS::UdpReceiveStrategy::check_header(), OpenDDS::DCPS::DataWriterImpl::create_ack_token(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::customize_queue_element_helper(), OpenDDS::DCPS::WriteDataContainer::data_delivered(), OpenDDS::DCPS::RtpsUdpReceiveStrategy::deliver_sample_i(), OpenDDS::DCPS::RtpsUdpDataLink::durability_resend(), OpenDDS::DCPS::ReliableSession::expire_naks(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsReader::gather_ack_nacks_i(), OpenDDS::DCPS::TcpDataLink::handle_send_request_ack(), OpenDDS::DCPS::DisjointSequence::insert(), OpenDDS::DCPS::SingleSendBuffer::insert(), OpenDDS::DCPS::TransportReassembly::FragInfo::insert(), OpenDDS::DCPS::RtpsUdpDataLink::MultiSendBuffer::insert(), OpenDDS::DCPS::SingleSendBuffer::insert_fragment(), OpenDDS::DCPS::ReliableSession::nak_received(), OpenDDS::DCPS::operator+(), OpenDDS::DCPS::operator+=(), OpenDDS::DCPS::operator<<(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::process_acknack(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsReader::process_data_i(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsReader::process_gap_i(), OpenDDS::RTPS::Sedp::TypeLookupReplyReader::process_get_dependencies_reply(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsReader::process_heartbeat_i(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::process_nackfrag(), OpenDDS::RTPS::Sedp::TypeLookupReplyReader::process_type_lookup_reply(), OpenDDS::RTPS::Sedp::TypeLookupRequestReader::process_type_lookup_request(), OpenDDS::DCPS::ReliableSession::ready_to_deliver(), OpenDDS::DCPS::TransportReassembly::reassemble(), OpenDDS::DCPS::TransportReassembly::reassemble_i(), OpenDDS::RTPS::Sedp::request_type_objects(), OpenDDS::DCPS::InstanceState::sample_info(), OpenDDS::DCPS::DataReaderImpl::sample_info(), OpenDDS::DCPS::ReliableSession::send_nakack(), OpenDDS::DCPS::ReliableSession::send_naks(), OpenDDS::RTPS::Sedp::TypeLookupRequestWriter::send_type_lookup_request(), OpenDDS::DCPS::WriteDataContainer::sequence_acknowledged_i(), OpenDDS::DCPS::DisjointSequence::to_bitmap(), OpenDDS::DCPS::to_string(), OpenDDS::RTPS::Spdp::validateSequenceNumber(), OpenDDS::DCPS::vwrite(), OpenDDS::DCPS::WriteDataContainer::wait_ack_of_seq(), and OpenDDS::DCPS::DataWriterImpl::wait_for_acknowledgments().

92  {
93  return LOW_BASE * this->high_ + this->low_;
94  }

◆ operator!=()

bool OpenDDS::DCPS::SequenceNumber::operator!= ( const SequenceNumber rvalue) const
inline

Definition at line 106 of file SequenceNumber.h.

References high_, and low_.

106  {
107  return (this->high_ != rvalue.high_) ||
108  (this->low_ != rvalue.low_);
109  }

◆ operator++() [1/2]

SequenceNumber& OpenDDS::DCPS::SequenceNumber::operator++ ( void  )
inline

Pre-increment.

Definition at line 36 of file SequenceNumber.h.

References ACE_INT32_MAX, and ACE_UINT32_MAX.

36  {
37  if (this->low_ == ACE_UINT32_MAX) {
38  if (this->high_ == ACE_INT32_MAX) {
39  // this code is here, despite the RTPS spec statement:
40  // "sequence numbers never wrap"
41  this->high_ = 0;
42  this->low_ = 1;
43  } else {
44  ++this->high_;
45  this->low_ = 0;
46  }
47  } else {
48  ++this->low_;
49  }
50  return *this;
51  }

◆ operator++() [2/2]

SequenceNumber OpenDDS::DCPS::SequenceNumber::operator++ ( int  )
inline

Post-increment.

Definition at line 54 of file SequenceNumber.h.

References value.

54  {
55  SequenceNumber value(*this);
56  ++*this;
57  return value;
58  }
const LogLevel::Value value
Definition: debug.cpp:61
SequenceNumber(Value value=INITIAL_VALUE)
Construct with a value, default to one (starting point).

◆ operator<()

bool OpenDDS::DCPS::SequenceNumber::operator< ( const SequenceNumber rvalue) const
inline

Definition at line 96 of file SequenceNumber.h.

References high_, and low_.

96  {
97  return (this->high_ < rvalue.high_)
98  || (this->high_ == rvalue.high_ && this->low_ < rvalue.low_);
99  }

◆ operator<=()

bool OpenDDS::DCPS::SequenceNumber::operator<= ( const SequenceNumber rvalue) const
inline

Definition at line 113 of file SequenceNumber.h.

113  {
114  return !(rvalue < *this);
115  }

◆ operator==()

bool OpenDDS::DCPS::SequenceNumber::operator== ( const SequenceNumber rvalue) const
inline

Derive a full suite of logical operations.

Definition at line 102 of file SequenceNumber.h.

References high_, and low_.

102  {
103  return (this->high_ == rvalue.high_) &&
104  (this->low_ == rvalue.low_);
105  }

◆ operator>()

bool OpenDDS::DCPS::SequenceNumber::operator> ( const SequenceNumber rvalue) const
inline

Definition at line 116 of file SequenceNumber.h.

116  {
117  return (rvalue < *this)
118  && (*this != rvalue);
119  }

◆ operator>=()

bool OpenDDS::DCPS::SequenceNumber::operator>= ( const SequenceNumber rvalue) const
inline

Definition at line 110 of file SequenceNumber.h.

110  {
111  return !(*this < rvalue);
112  }

◆ previous()

SequenceNumber OpenDDS::DCPS::SequenceNumber::previous ( void  ) const
inline

Definition at line 60 of file SequenceNumber.h.

References ACE_INT32_MAX, ACE_UINT32_MAX, high_, and low_.

Referenced by OpenDDS::DCPS::RtpsUdpDataLink::ReaderInfo::acked_sn(), OpenDDS::DCPS::BestEffortSession::check_header(), OpenDDS::DCPS::UdpReceiveStrategy::check_header(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::check_leader_lagger(), OpenDDS::DCPS::DisjointSequence::erase(), OpenDDS::DCPS::DisjointSequence::fill_bitmap_range(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsReader::gather_ack_nacks_i(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::gather_directed_heartbeat_i(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::gather_gaps_i(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::gather_nack_replies_i(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsReader::process_data_i(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsReader::process_gap_i(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsReader::process_heartbeat_i(), and OpenDDS::DCPS::BestEffortSession::ready_to_deliver().

60  {
61  SequenceNumber retVal(*this);
62  if ((this->low_ == 0) && (this->high_ == 0)) {
63  retVal.high_ = ACE_INT32_MAX;
64  retVal.low_ = ACE_UINT32_MAX;
65  return retVal;
66  }
67  if (this->low_ == 0) {
68  --retVal.high_;
69  retVal.low_ = ACE_UINT32_MAX;
70  } else {
71  --retVal.low_;
72  }
73  return retVal;
74  }
SequenceNumber(Value value=INITIAL_VALUE)
Construct with a value, default to one (starting point).
#define ACE_UINT32_MAX
#define ACE_INT32_MAX

◆ SEQUENCENUMBER_UNKNOWN()

static SequenceNumber OpenDDS::DCPS::SequenceNumber::SEQUENCENUMBER_UNKNOWN ( )
inlinestatic

Definition at line 129 of file SequenceNumber.h.

Referenced by OpenDDS::DCPS::WriteDataContainer::add_reader_acks(), OpenDDS::DCPS::BestEffortSession::check_header(), OpenDDS::DCPS::UdpReceiveStrategy::check_header(), OpenDDS::DCPS::DataReaderImpl::check_historic(), OpenDDS::DCPS::DataWriterImpl::create_control_message(), OpenDDS::DCPS::ReplayerImpl::create_sample_data_message(), OpenDDS::DCPS::DisjointSequence::cumulative_ack(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::customize_queue_element_helper(), OpenDDS::DCPS::WriteDataContainer::data_delivered(), OpenDDS::RTPS::Sedp::Writer::end_historic_samples(), OpenDDS::DCPS::WriteDataContainer::get_cumulative_ack(), OpenDDS::DCPS::WriteDataContainer::get_last_ack(), OpenDDS::DCPS::TransportClient::get_max_sn(), OpenDDS::DCPS::DataWriterImpl::get_next_sn_i(), OpenDDS::DCPS::RtpsUdpDataLink::MultiSendBuffer::insert(), OpenDDS::DCPS::DisjointSequence::last_ack(), OpenDDS::DCPS::ReliableSession::nak_received(), OpenDDS::DCPS::RtpsUdpDataLink::RtpsWriter::process_acknack(), OpenDDS::DCPS::DataWriterImpl::ReaderInfo::ReaderInfo(), OpenDDS::DCPS::BestEffortSession::ready_to_deliver(), OpenDDS::RTPS::Sedp::Writer::request_ack(), OpenDDS::RTPS::Sedp::request_type_objects(), OpenDDS::DCPS::TransportCustomizedElement::sequence(), OpenDDS::DCPS::TransportQueueElement::sequence(), OpenDDS::DCPS::WriteDataContainer::sequence_acknowledged_i(), OpenDDS::RTPS::Sedp::Writer::set_header_fields(), OpenDDS::RTPS::Sedp::write_durable_participant_message_data(), OpenDDS::RTPS::Sedp::write_durable_participant_message_data_secure(), OpenDDS::RTPS::Sedp::write_stateless_message(), OpenDDS::RTPS::Sedp::write_volatile_message(), and OpenDDS::DCPS::WriterInfoListener::writer_removed().

129  {
130  return SequenceNumber(-1, 0);
131  }
SequenceNumber(Value value=INITIAL_VALUE)
Construct with a value, default to one (starting point).

◆ setValue() [1/2]

void OpenDDS::DCPS::SequenceNumber::setValue ( Value  value)
inline

Definition at line 76 of file SequenceNumber.h.

Referenced by OpenDDS::DCPS::operator+=(), and OpenDDS::RTPS::to_opendds_seqnum().

76  {
77  if (value < MIN_VALUE) {
78  value = MIN_VALUE;
79  }
80  this->high_ = ACE_INT32(value / LOW_BASE);
81  this->low_ = ACE_UINT32(value % LOW_BASE);
82  }
const LogLevel::Value value
Definition: debug.cpp:61
static const Value MIN_VALUE

◆ setValue() [2/2]

void OpenDDS::DCPS::SequenceNumber::setValue ( ACE_INT32  high,
ACE_UINT32  low 
)
inline

Definition at line 84 of file SequenceNumber.h.

84  {
85  this->high_ = high;
86  this->low_ = low;
87  if (this->getValue() < MIN_VALUE) {
88  this->setValue(MIN_VALUE);
89  }
90  }
static const Value MIN_VALUE

◆ ZERO()

static SequenceNumber OpenDDS::DCPS::SequenceNumber::ZERO ( )
inlinestatic

Friends And Related Function Documentation

◆ operator>>

ACE_CDR::Boolean operator>> ( Serializer s,
SequenceNumber x 
)
friend

Definition at line 164 of file SequenceNumber.h.

164  {
165  ACE_INT32 high;
166  ACE_UINT32 low;
167  if (!(s >> high)) {
168  return false;
169  }
170  if (!(s >> low)) {
171  return false;
172  }
173  x = SequenceNumber(high, low);
174  return true;
175 }
SequenceNumber(Value value=INITIAL_VALUE)
Construct with a value, default to one (starting point).

Member Data Documentation

◆ high_

ACE_INT32 OpenDDS::DCPS::SequenceNumber::high_
private

Definition at line 152 of file SequenceNumber.h.

Referenced by operator!=(), operator<(), operator==(), and previous().

◆ INITIAL_VALUE

const Value OpenDDS::DCPS::SequenceNumber::INITIAL_VALUE = 1
static

Definition at line 138 of file SequenceNumber.h.

◆ low_

ACE_UINT32 OpenDDS::DCPS::SequenceNumber::low_
private

Definition at line 153 of file SequenceNumber.h.

Referenced by operator!=(), operator<(), operator==(), and previous().

◆ LOW_BASE

const Value OpenDDS::DCPS::SequenceNumber::LOW_BASE = 0x0000000100000000LL
static

Definition at line 140 of file SequenceNumber.h.

◆ MAX_VALUE

const Value OpenDDS::DCPS::SequenceNumber::MAX_VALUE = ACE_INT64_MAX
static

◆ MIN_VALUE

const Value OpenDDS::DCPS::SequenceNumber::MIN_VALUE = 0
static

Definition at line 139 of file SequenceNumber.h.


The documentation for this class was generated from the following file: