diff options
Diffstat (limited to 'cpp/src/qpid/framing')
| -rw-r--r-- | cpp/src/qpid/framing/SequenceNumberSet.cpp | 16 | ||||
| -rw-r--r-- | cpp/src/qpid/framing/SequenceNumberSet.h | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/cpp/src/qpid/framing/SequenceNumberSet.cpp b/cpp/src/qpid/framing/SequenceNumberSet.cpp index 357b5dabd7..3bee5fb09a 100644 --- a/cpp/src/qpid/framing/SequenceNumberSet.cpp +++ b/cpp/src/qpid/framing/SequenceNumberSet.cpp @@ -44,6 +44,22 @@ uint32_t SequenceNumberSet::encodedSize() const return 2 /*count*/ + (size() * 4); } +SequenceNumberSet SequenceNumberSet::condense() const +{ + SequenceNumberSet result; + const_iterator last = end(); + for (const_iterator i = begin(); i != end(); i++) { + if (last == end()) { + last = i; + } else if (*i - *last > 1) { + result.push_back(*last); + result.push_back(*i); + last = end(); + } + } + return result; +} + namespace qpid{ namespace framing{ diff --git a/cpp/src/qpid/framing/SequenceNumberSet.h b/cpp/src/qpid/framing/SequenceNumberSet.h index bcf78d4f22..7643d68071 100644 --- a/cpp/src/qpid/framing/SequenceNumberSet.h +++ b/cpp/src/qpid/framing/SequenceNumberSet.h @@ -39,6 +39,7 @@ public: void encode(Buffer& buffer) const; void decode(Buffer& buffer); uint32_t encodedSize() const; + SequenceNumberSet condense() const; friend std::ostream& operator<<(std::ostream&, const SequenceNumberSet&); }; |
