From 25be7c82e741e889b34ea37f345c59a7fd399be5 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 17 Apr 2016 09:05:37 -0400 Subject: [PATCH] Database: Segmented interval in ::deleteInterval --- src/Database.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Database.cpp b/src/Database.cpp index 4338e937..3da50049 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -136,13 +136,18 @@ void Database::addInterval (const Interval& interval) //////////////////////////////////////////////////////////////////////////////// void Database::deleteInterval (const Interval& interval) { - std::vector ::reverse_iterator ri; - for (ri = _files.rbegin (); ri != _files.rend (); ri++) - if (ri->deleteInterval (interval)) - break; + auto intervalRange = interval.range (); + for (auto& segment : segmentRange (intervalRange)) + { + // Get the index into _files for the appropriate Datafile, which may be + // created on demand. + auto df = getDatafile (segment.start ().year (), segment.start ().month ()); - // Datafile for this interval does not exist. This means the data file was - // deleted/removed, or the interval is old. Nothing to do. + // Intersect the original interval range, and the segment. + Interval segmentedInterval (interval); + segmentedInterval.range (intervalRange.intersect (segment)); + _files[df].deleteInterval (segmentedInterval); + } } ////////////////////////////////////////////////////////////////////////////////