From 7ca8eadf7dc876b4dd7c795c17b87ec10e7fbe7f Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Mon, 14 May 2012 19:44:53 +0000 Subject: NO-JIRA: Fix bug in RangeSet when insterting a range that covers multiple ranges. See new tests added to tests/RangeSet.cpp testRangeSetAddRange git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1338364 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/include/qpid/RangeSet.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'cpp/include') diff --git a/cpp/include/qpid/RangeSet.h b/cpp/include/qpid/RangeSet.h index 36991fd784..ef0ad032da 100644 --- a/cpp/include/qpid/RangeSet.h +++ b/cpp/include/qpid/RangeSet.h @@ -224,17 +224,15 @@ bool RangeSet::contains(const Range& r) const { template void RangeSet::addRange(const Range& r) { if (r.empty()) return; - typename Ranges::iterator i = - std::lower_bound(ranges.begin(), ranges.end(), r); + typename Ranges::iterator i = std::lower_bound(ranges.begin(), ranges.end(), r); if (i == ranges.end() || !i->touching(r)) - ranges.insert(i, r); + ranges.insert(i, r); // No overlap else { i->merge(r); typename Ranges::iterator j = i; - if (++j != ranges.end() && i->touching(*j)) { + while (++j != ranges.end() && i->touching(*j)) i->merge(*j); - ranges.erase(j); - } + ranges.erase(i+1,j); } } -- cgit v1.2.1