From 15558475370376637478a14d0571827d27493d7e Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 24 Jul 2016 09:08:10 -0400 Subject: [PATCH] validate: Generalized code to allow autoFill calls from other places --- src/validate.cpp | 56 ++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/validate.cpp b/src/validate.cpp index c68f9c40..039a7133 100644 --- a/src/validate.cpp +++ b/src/validate.cpp @@ -38,41 +38,37 @@ // range. // static void autoFill ( - const CLI& cli, const Rules& rules, Database& database, const Interval& filter, Interval& interval) { - if (findHint (cli, ":fill")) + // An empty filter allows scanning beyond interval.range. + Interval range_filter; + + // Look backwards from interval.range.start to a boundary. + auto tracked = getTracked (database, rules, range_filter); + for (auto earlier = tracked.rbegin (); earlier != tracked.rend (); ++earlier) { - // An empty filter allows scanning beyond interval.range. - Interval range_filter; - - // Look backwards from interval.range.start to a boundary. - auto tracked = getTracked (database, rules, range_filter); - for (auto earlier = tracked.rbegin (); earlier != tracked.rend (); ++earlier) + if (! earlier->range.is_open () && + earlier->range.end < interval.range.start) { - if (! earlier->range.is_open () && - earlier->range.end < interval.range.start) - { - interval.range.start = earlier->range.end; - std::cout << "Backfilled to " << interval.range.start.toISOLocalExtended () << "\n"; - break; - } + interval.range.start = earlier->range.end; + std::cout << "Backfilled to " << interval.range.start.toISOLocalExtended () << "\n"; + break; } + } - // If the interval is closed, scan forwards for the next boundary. - if (! interval.range.is_open ()) +// If the interval is closed, scan forwards for the next boundary. + if (! interval.range.is_open ()) + { + for (auto& later : tracked) { - for (auto& later : tracked) + if (interval.range.end < later.range.start) { - if (interval.range.end < later.range.start) - { - interval.range.end = later.range.start; - std::cout << "Filled to " << interval.range.end.toISOLocalExtended () << "\n"; - break; - } + interval.range.end = later.range.start; + std::cout << "Filled to " << interval.range.end.toISOLocalExtended () << "\n"; + break; } } } @@ -86,13 +82,12 @@ static void autoFill ( // recorded data. // static void autoAdjust ( - const CLI& cli, + bool adjust, const Rules& rules, Database& database, Interval& interval) { - // Without :adjust, overlapping intervals are an error condition. - auto adjust = findHint (cli, ":adjust"); + // Without (adjust == true), overlapping intervals are an error condition. // An empty filter allows scanning beyond interval.range. Interval range_filter; @@ -150,7 +145,6 @@ static void autoAdjust ( */ - } //////////////////////////////////////////////////////////////////////////////// @@ -194,8 +188,10 @@ void validate ( filter.range = Range (Datetime ("today"), Datetime ("tomorrow")); // All validation performed here. - autoFill (cli, rules, database, filter, interval); - autoAdjust (cli, rules, database, interval); + if (findHint (cli, ":fill")) + autoFill (rules, database, filter, interval); + + autoAdjust (findHint (cli, ":adjust"), rules, database, interval); // TODO This warning is not working properly, because when an interval is // modified, it ifirst deleted, then added. This causes this code to