summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-10-18 12:53:46 +0000
committerGordon Sim <gsim@apache.org>2007-10-18 12:53:46 +0000
commite77ead1fcc4ab32323a1a1212e42498ed6c4b60e (patch)
tree417fbf542630124e09e8587ff925e612eacd48a1 /cpp/src/qpid
parent5fab67a9881d5113a1b1bb0cd66235b430885618 (diff)
downloadqpid-python-e77ead1fcc4ab32323a1a1212e42498ed6c4b60e.tar.gz
Fixed return of acquired message ranges (and added tests)
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@585952 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/broker/MessageHandlerImpl.cpp2
-rw-r--r--cpp/src/qpid/framing/SequenceNumberSet.cpp16
2 files changed, 12 insertions, 6 deletions
diff --git a/cpp/src/qpid/broker/MessageHandlerImpl.cpp b/cpp/src/qpid/broker/MessageHandlerImpl.cpp
index 87b23102e2..b12910893a 100644
--- a/cpp/src/qpid/broker/MessageHandlerImpl.cpp
+++ b/cpp/src/qpid/broker/MessageHandlerImpl.cpp
@@ -198,7 +198,7 @@ void MessageHandlerImpl::acquire(const SequenceNumberSet& transfers, u_int8_t /*
//TODO: implement mode
SequenceNumberSet results;
- RangedOperation op = boost::bind(&SemanticState::acquire, &state, _1, _2, results);
+ RangedOperation op = boost::bind(&SemanticState::acquire, &state, _1, _2, boost::ref(results));
transfers.processRanges(op);
results = results.condense();
getProxy().getMessage().acquired(results);
diff --git a/cpp/src/qpid/framing/SequenceNumberSet.cpp b/cpp/src/qpid/framing/SequenceNumberSet.cpp
index b769befeb7..afab9033e5 100644
--- a/cpp/src/qpid/framing/SequenceNumberSet.cpp
+++ b/cpp/src/qpid/framing/SequenceNumberSet.cpp
@@ -48,14 +48,20 @@ SequenceNumberSet SequenceNumberSet::condense() const
{
SequenceNumberSet result;
const_iterator last = end();
+ const_iterator start = end();
for (const_iterator i = begin(); i != end(); i++) {
- if (last == end()) {
- last = i;
+ if (start == end()) {
+ start = i;
} else if (*i - *last > 1) {
- result.push_back(*last);
- result.push_back(*i);
- last = end();
+ result.push_back(*start);
+ result.push_back(*last);
+ start = i;
}
+ last = i;
+ }
+ if (start != end()) {
+ result.push_back(*start);
+ result.push_back(*last);
}
return result;
}