summaryrefslogtreecommitdiff
path: root/qpid/cpp/include
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2012-05-14 19:44:53 +0000
committerAlan Conway <aconway@apache.org>2012-05-14 19:44:53 +0000
commitbe245407d6738e33a65770bb69db568105c352b1 (patch)
treeba28309d434432013f3e4b6d148d1d08e8e9b2b2 /qpid/cpp/include
parentfa7baeaf72635628b9d2ea2ad60ba782d6313044 (diff)
downloadqpid-python-be245407d6738e33a65770bb69db568105c352b1.tar.gz
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@1338364 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/include')
-rw-r--r--qpid/cpp/include/qpid/RangeSet.h10
1 files changed, 4 insertions, 6 deletions
diff --git a/qpid/cpp/include/qpid/RangeSet.h b/qpid/cpp/include/qpid/RangeSet.h
index 36991fd784..ef0ad032da 100644
--- a/qpid/cpp/include/qpid/RangeSet.h
+++ b/qpid/cpp/include/qpid/RangeSet.h
@@ -224,17 +224,15 @@ bool RangeSet<T>::contains(const Range<T>& r) const {
template <class T> void RangeSet<T>::addRange(const Range<T>& 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);
}
}