Line data Source code
1 : /* 2 : * 3 : * 4 : * Distributed under the OpenDDS License. 5 : * See: http://www.opendds.org/license.html 6 : */ 7 : 8 : OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL 9 : 10 : namespace OpenDDS { 11 : namespace DCPS { 12 : 13 : ACE_INLINE SequenceNumber 14 30 : DisjointSequence::low() const 15 : { 16 30 : return sequences_.begin()->first; 17 : } 18 : 19 : ACE_INLINE SequenceNumber 20 26 : DisjointSequence::high() const 21 : { 22 26 : return sequences_.rbegin()->second; 23 : } 24 : 25 : ACE_INLINE SequenceNumber 26 40 : DisjointSequence::cumulative_ack() const 27 : { 28 40 : return sequences_.empty() 29 0 : ? SequenceNumber::SEQUENCENUMBER_UNKNOWN() 30 80 : : sequences_.begin()->second; 31 : } 32 : 33 : ACE_INLINE SequenceNumber 34 5 : DisjointSequence::last_ack() const 35 : { 36 5 : return sequences_.empty() 37 0 : ? SequenceNumber::SEQUENCENUMBER_UNKNOWN() 38 10 : : sequences_.rbegin()->first; 39 : } 40 : 41 : ACE_INLINE bool 42 9 : DisjointSequence::empty() const 43 : { 44 9 : return sequences_.empty(); 45 : } 46 : 47 : ACE_INLINE bool 48 62 : DisjointSequence::disjoint() const 49 : { 50 62 : return sequences_.size() > 1; 51 : } 52 : 53 : ACE_INLINE 54 191 : DisjointSequence::DisjointSequence() 55 : { 56 191 : } 57 : 58 : ACE_INLINE void 59 11 : DisjointSequence::reset() 60 : { 61 11 : sequences_.clear(); 62 11 : } 63 : 64 : ACE_INLINE bool 65 442 : DisjointSequence::insert(SequenceNumber value) 66 : { 67 442 : return insert_i(SequenceRange(value, value)); 68 : } 69 : 70 : ACE_INLINE bool 71 37 : DisjointSequence::insert(const SequenceRange& range) 72 : { 73 37 : return insert_i(range); 74 : } 75 : 76 : ACE_INLINE bool 77 5 : DisjointSequence::insert(const SequenceRange& range, 78 : OPENDDS_VECTOR(SequenceRange)& gaps) 79 : { 80 5 : return insert_i(range, &gaps); 81 : } 82 : 83 : ACE_INLINE bool 84 : DisjointSequence::insert_filtered(const SequenceRange& range, const DisjointSequence& filter) 85 : { 86 : for (SequenceNumber i = range.first; i <= range.second; ++i) { 87 : if (filter.contains(i) && !insert(i)) { 88 : return false; 89 : } 90 : } 91 : return true; 92 : } 93 : 94 : ACE_INLINE OPENDDS_VECTOR(SequenceRange) 95 8 : DisjointSequence::present_sequence_ranges() const 96 : { 97 8 : OPENDDS_VECTOR(SequenceRange) present; 98 8 : std::copy(sequences_.begin(), sequences_.end(), std::back_inserter(present)); 99 8 : return present; 100 0 : } 101 : 102 : ACE_INLINE bool 103 59 : DisjointSequence::contains(SequenceNumber value) const 104 : { 105 59 : return sequences_.has(value); 106 : } 107 : 108 : ACE_INLINE bool 109 : DisjointSequence::contains_any(const SequenceRange& range) const 110 : { 111 : return sequences_.has_any(range); 112 : } 113 : 114 : } // namespace DCPS 115 : } // namespace OpenDDS 116 : 117 : OPENDDS_END_VERSIONED_NAMESPACE_DECL