From 1f3340f113cfd5d6b5eab9108781de832819a884 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Sat, 10 Oct 2009 17:01:45 +0000 Subject: [PATCH] Optimize construction of compressed index sets. git-svn-id: https://svn.dealii.org/trunk@19808 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/base/source/index_set.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/deal.II/base/source/index_set.cc b/deal.II/base/source/index_set.cc index ec940c07cf..2519727d4c 100644 --- a/deal.II/base/source/index_set.cc +++ b/deal.II/base/source/index_set.cc @@ -122,7 +122,19 @@ IndexSet::compress () const // current range, so we'll // delete all of them const unsigned int old_index = *next_individual_index; - individual_indices.erase (next_individual_index); + + { + std::set::iterator + last_index = next_individual_index; + ++last_index; + while ((last_index != individual_indices.end()) + && + (*last_index < new_range.second)) + ++last_index; + + individual_indices.erase (next_individual_index, + last_index); + } next_individual_index = individual_indices.lower_bound (old_index); contiguous_ranges.erase (next_range); -- 2.39.5