validate: Generalized code to allow autoFill calls from other places

This commit is contained in:
Paul Beckingham 2016-07-24 09:08:10 -04:00
parent 45b09986d8
commit 1555847537

View file

@ -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