From a711889b0b3c16d7bffe008ece53cd41d5069909 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 3 Mar 2008 17:55:21 +0000 Subject: Fixed consolidation of ranges and added further validation to tests. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@633206 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/framing/SequenceSet.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'cpp/src/qpid/framing/SequenceSet.cpp') diff --git a/cpp/src/qpid/framing/SequenceSet.cpp b/cpp/src/qpid/framing/SequenceSet.cpp index e3461e233b..1858467de6 100644 --- a/cpp/src/qpid/framing/SequenceSet.cpp +++ b/cpp/src/qpid/framing/SequenceSet.cpp @@ -73,14 +73,18 @@ void SequenceSet::add(const SequenceNumber& start, const SequenceNumber& end) add(end, start); } else { Range r(start, end); - bool merged = false; + Ranges::iterator merged = ranges.end(); Ranges::iterator i = ranges.begin(); - while (i != ranges.end() && !merged && i->start < start) { - if (i->merge(r)) merged = true; + while (i != ranges.end() && merged == ranges.end() && i->start < start) { + if (i->merge(r)) merged = i; i++; } - if (!merged) { - ranges.insert(i, r); + if (merged == ranges.end()) { + i = merged = ranges.insert(i, r); + i++; + } + while (i != ranges.end() && merged->merge(*i)) { + i = ranges.erase(i); } } } @@ -190,7 +194,7 @@ bool SequenceSet::Range::merge(const Range& r) bool SequenceSet::Range::mergeable(const SequenceNumber& s) const { - if (contains(s) || start - s == 1) { + if (contains(s) || start - s == 1 || s - end == 1) { return true; } else { return false; -- cgit v1.2.1