summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/framing
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-10-04 16:06:05 +0000
committerGordon Sim <gsim@apache.org>2007-10-04 16:06:05 +0000
commit03f1df9ff7894a6d910120c82bba49e6193178ee (patch)
treee27792701ea80e1aa83d1c5730da71502374d25d /cpp/src/qpid/framing
parentc848c1a4e6be50176f10170c6422c5e4d5385770 (diff)
downloadqpid-python-03f1df9ff7894a6d910120c82bba49e6193178ee.tar.gz
Additional tests and fixes
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@581957 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/framing')
-rw-r--r--cpp/src/qpid/framing/AccumulatedAck.cpp7
-rw-r--r--cpp/src/qpid/framing/AccumulatedAck.h3
-rw-r--r--cpp/src/qpid/framing/SequenceNumberSet.cpp6
-rw-r--r--cpp/src/qpid/framing/SequenceNumberSet.h7
4 files changed, 16 insertions, 7 deletions
diff --git a/cpp/src/qpid/framing/AccumulatedAck.cpp b/cpp/src/qpid/framing/AccumulatedAck.cpp
index 219a68b96c..bf53bf0cd6 100644
--- a/cpp/src/qpid/framing/AccumulatedAck.cpp
+++ b/cpp/src/qpid/framing/AccumulatedAck.cpp
@@ -22,12 +22,15 @@
#include <assert.h>
#include <iostream>
+#include <boost/bind.hpp>
using std::list;
using std::max;
using std::min;
using namespace qpid::framing;
+AccumulatedAck::AccumulatedAck(SequenceNumber r) : mark(r) {}
+
void AccumulatedAck::update(SequenceNumber first, SequenceNumber last){
assert(first <= last);
if (last < mark) return;
@@ -103,9 +106,7 @@ void AccumulatedAck::collectRanges(SequenceNumberSet& set) const
void AccumulatedAck::update(const SequenceNumber cumulative, const SequenceNumberSet& range)
{
update(mark, cumulative);
- for (SequenceNumberSet::const_iterator i = range.begin(); i != range.end(); i++) {
- update(*i, *(++i));
- }
+ range.processRanges(*this);
}
diff --git a/cpp/src/qpid/framing/AccumulatedAck.h b/cpp/src/qpid/framing/AccumulatedAck.h
index 1f66197e2a..a635d2ea04 100644
--- a/cpp/src/qpid/framing/AccumulatedAck.h
+++ b/cpp/src/qpid/framing/AccumulatedAck.h
@@ -58,13 +58,14 @@ namespace qpid {
*/
std::list<Range> ranges;
- explicit AccumulatedAck(SequenceNumber r = SequenceNumber()) : mark(r) {}
+ explicit AccumulatedAck(SequenceNumber r = SequenceNumber());
void update(SequenceNumber firstTag, SequenceNumber lastTag);
void consolidate();
void clear();
bool covers(SequenceNumber tag) const;
void collectRanges(SequenceNumberSet& set) const;
void update(const SequenceNumber cumulative, const SequenceNumberSet& range);
+ void operator()(SequenceNumber first, SequenceNumber last) { update(first, last); }
};
std::ostream& operator<<(std::ostream&, const Range&);
std::ostream& operator<<(std::ostream&, const AccumulatedAck&);
diff --git a/cpp/src/qpid/framing/SequenceNumberSet.cpp b/cpp/src/qpid/framing/SequenceNumberSet.cpp
index f1c81e078b..b769befeb7 100644
--- a/cpp/src/qpid/framing/SequenceNumberSet.cpp
+++ b/cpp/src/qpid/framing/SequenceNumberSet.cpp
@@ -60,6 +60,12 @@ SequenceNumberSet SequenceNumberSet::condense() const
return result;
}
+void SequenceNumberSet::addRange(const SequenceNumber& start, const SequenceNumber& end)
+{
+ push_back(start);
+ push_back(end);
+}
+
namespace qpid{
namespace framing{
diff --git a/cpp/src/qpid/framing/SequenceNumberSet.h b/cpp/src/qpid/framing/SequenceNumberSet.h
index f9d0cc1fd4..9091e7142e 100644
--- a/cpp/src/qpid/framing/SequenceNumberSet.h
+++ b/cpp/src/qpid/framing/SequenceNumberSet.h
@@ -41,17 +41,18 @@ public:
void decode(Buffer& buffer);
uint32_t encodedSize() const;
SequenceNumberSet condense() const;
+ void addRange(const SequenceNumber& start, const SequenceNumber& end);
template <class T>
- void processRanges(T t) const
+ void processRanges(T& t) const
{
if (size() % 2) { //must be even number
throw InvalidArgumentException("SequenceNumberSet contains odd number of elements");
}
for (SequenceNumberSet::const_iterator i = begin(); i != end(); i++) {
- SequenceNumber first = i->getValue();
- SequenceNumber last = (++i)->getValue();
+ SequenceNumber first = *(i);
+ SequenceNumber last = *(++i);
t(first, last);
}
}