OpenDDS::DCPS::SequenceNumber Class Reference

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

#include <SequenceNumber.h>

Collaboration diagram for OpenDDS::DCPS::SequenceNumber:
Collaboration graph
[legend]

List of all members.

Public Types

typedef ACE_INT64 Value

Public Member Functions

 SequenceNumber (Value value=MIN_VALUE)
 Construct with a value, default to one (starting point).
SequenceNumberoperator++ ()
 Pre-increment.
SequenceNumber operator++ (int)
 Post-increment.
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.
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 MIN_VALUE = 1
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

Definition at line 29 of file SequenceNumber.h.


Constructor & Destructor Documentation

OpenDDS::DCPS::SequenceNumber::SequenceNumber ( Value  value = MIN_VALUE  )  [inline]

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

Definition at line 31 of file SequenceNumber.h.

00031                                           {
00032     setValue(value);
00033   }

OpenDDS::DCPS::SequenceNumber::SequenceNumber ( ACE_INT32  high,
ACE_UINT32  low 
) [inline, private]

Definition at line 147 of file SequenceNumber.h.

00148     : high_(high), low_(low) {
00149   }


Member Function Documentation

ACE_INT32 OpenDDS::DCPS::SequenceNumber::getHigh (  )  const [inline]
ACE_UINT32 OpenDDS::DCPS::SequenceNumber::getLow (  )  const [inline]
Value OpenDDS::DCPS::SequenceNumber::getValue (  )  const [inline]

Definition at line 92 of file SequenceNumber.h.

Referenced by OpenDDS::DCPS::TcpDataLink::ack_received(), OpenDDS::DCPS::UdpReceiveStrategy::check_header(), OpenDDS::DCPS::BestEffortSession::check_header(), OpenDDS::DCPS::DataWriterImpl::create_ack_token(), OpenDDS::DCPS::WriteDataContainer::data_delivered(), OpenDDS::DCPS::RtpsUdpReceiveStrategy::deliver_sample_i(), OpenDDS::DCPS::ReliableSession::expire_naks(), OpenDDS::DCPS::TcpDataLink::handle_send_request_ack(), OpenDDS::DCPS::SingleSendBuffer::insert(), OpenDDS::DCPS::RtpsUdpDataLink::MultiSendBuffer::insert(), OpenDDS::DCPS::DisjointSequence::insert(), OpenDDS::DCPS::SingleSendBuffer::insert_fragment(), OpenDDS::DCPS::ReliableSession::nak_received(), OpenDDS::DCPS::operator+(), OpenDDS::DCPS::operator+=(), OpenDDS::DCPS::RtpsUdpDataLink::process_data_i(), OpenDDS::DCPS::RtpsUdpDataLink::process_gap_i(), OpenDDS::DCPS::RtpsUdpDataLink::process_heartbeat_i(), OpenDDS::DCPS::ReliableSession::ready_to_deliver(), OpenDDS::DCPS::TransportReassembly::reassemble_i(), OpenDDS::DCPS::InstanceState::sample_info(), OpenDDS::DCPS::DataReaderImpl::sample_info(), OpenDDS::DCPS::RtpsUdpDataLink::send_ack_nacks(), OpenDDS::DCPS::ReliableSession::send_nakack(), OpenDDS::DCPS::ReliableSession::send_naks(), OpenDDS::DCPS::WriteDataContainer::sequence_acknowledged(), OpenDDS::DCPS::DisjointSequence::to_bitmap(), OpenDDS::DCPS::WriteDataContainer::wait_ack_of_seq(), and OpenDDS::DCPS::DataWriterImpl::wait_for_acknowledgments().

00092                          {
00093     return LOW_BASE * this->high_ + this->low_;
00094   }

Here is the caller graph for this function:

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

Definition at line 106 of file SequenceNumber.h.

References high_, and low_.

00106                                                       {
00107     return (this->high_ != rvalue.high_) ||
00108            (this->low_ != rvalue.low_) ;
00109   }

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

Post-increment.

Definition at line 54 of file SequenceNumber.h.

00054                                  {
00055     SequenceNumber value(*this);
00056     ++*this;
00057     return value ;
00058   }

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

Pre-increment.

Definition at line 36 of file SequenceNumber.h.

00036                                {
00037     if (this->low_ == ACE_UINT32_MAX) {
00038       if (this->high_ == ACE_INT32_MAX) {
00039         // this code is here, despite the RTPS spec statement:
00040         // "sequence numbers never wrap"
00041         this->high_ = 0;
00042         this->low_ = 1;
00043       } else {
00044         ++this->high_;
00045         this->low_ = 0;
00046       }
00047     } else {
00048       ++this->low_;
00049     }
00050     return *this ;
00051   }

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

Definition at line 96 of file SequenceNumber.h.

References high_, and low_.

00096                                                      {
00097     return (this->high_ < rvalue.high_)
00098       || (this->high_ == rvalue.high_ && this->low_ < rvalue.low_);
00099   }

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

Definition at line 113 of file SequenceNumber.h.

00113                                                       {
00114     return !(rvalue < *this);
00115   }

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_.

00102                                                       {
00103     return (this->high_ == rvalue.high_) &&
00104            (this->low_ == rvalue.low_) ;
00105   }

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

Definition at line 116 of file SequenceNumber.h.

00116                                                      {
00117     return (rvalue < *this)
00118            && (*this != rvalue);
00119   }

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

Definition at line 110 of file SequenceNumber.h.

00110                                                       {
00111     return !(*this  < rvalue);
00112   }

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

Definition at line 60 of file SequenceNumber.h.

References high_, and low_.

Referenced by OpenDDS::DCPS::UdpReceiveStrategy::check_header(), OpenDDS::DCPS::BestEffortSession::check_header(), OpenDDS::DCPS::RtpsUdpDataLink::marshal_gaps(), OpenDDS::DCPS::RtpsUdpDataLink::process_data_i(), OpenDDS::DCPS::RtpsUdpDataLink::process_gap_i(), OpenDDS::DCPS::RtpsUdpDataLink::process_heartbeat_i(), OpenDDS::DCPS::BestEffortSession::ready_to_deliver(), OpenDDS::DCPS::RtpsUdpDataLink::received(), and OpenDDS::DCPS::RtpsUdpDataLink::send_ack_nacks().

00060                                   {
00061     SequenceNumber retVal(*this);
00062     if ((this->low_ == 1) && (this->high_ == 0)) {
00063       retVal.high_ = ACE_INT32_MAX;
00064       retVal.low_  = ACE_UINT32_MAX;
00065       return retVal;
00066     }
00067     if (this->low_ == 0) {
00068       --retVal.high_;
00069       retVal.low_ = ACE_UINT32_MAX;
00070     } else {
00071       --retVal.low_;
00072     }
00073     return retVal ;
00074   }

Here is the caller graph for this function:

static SequenceNumber OpenDDS::DCPS::SequenceNumber::SEQUENCENUMBER_UNKNOWN (  )  [inline, static]
void OpenDDS::DCPS::SequenceNumber::setValue ( ACE_INT32  high,
ACE_UINT32  low 
) [inline]

Definition at line 84 of file SequenceNumber.h.

00084                                                 {
00085     this->high_ = high;
00086     this->low_ = low;
00087     if (this->getValue() < MIN_VALUE) {
00088       this->setValue(MIN_VALUE);
00089     }
00090   }

void OpenDDS::DCPS::SequenceNumber::setValue ( Value  value  )  [inline]
static SequenceNumber OpenDDS::DCPS::SequenceNumber::ZERO (  )  [inline, static]

Friends And Related Function Documentation

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

Member Data Documentation

Definition at line 151 of file SequenceNumber.h.

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

Definition at line 152 of file SequenceNumber.h.

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

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

Definition at line 139 of file SequenceNumber.h.

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

Definition at line 138 of file SequenceNumber.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1