Add endsWithin(Range...)

- use startsWithin/endsWithin in autoAdjust(...)
- use Range::contains in startsWithin/endsWithin
This commit is contained in:
Thomas Lauf 2018-09-17 22:29:43 +02:00
parent 592e2853e0
commit bd65b67248
3 changed files with 18 additions and 5 deletions

View file

@ -102,7 +102,8 @@ bool Range::is_empty () const
////////////////////////////////////////////////////////////////////////////////
bool Range::contains (const Datetime &datetime) const
{
return start <= datetime && (! is_ended () || end >= datetime);
return (! is_started () || start <= datetime) &&
(! is_ended () || datetime < end);
}
////////////////////////////////////////////////////////////////////////////////
@ -192,12 +193,23 @@ bool Range::startsWithin (const Range& other) const
return !other.is_started ();
}
if (other.is_started () && start < other.start)
return other.contains (start);
}
////////////////////////////////////////////////////////////////////////////////
bool Range::endsWithin (const Range& other) const
{
if (other.is_empty ())
{
return false;
}
return !other.is_ended () || start < other.end;
if (!is_ended ())
{
return !other.is_ended ();
}
return other.contains (end);
}
////////////////////////////////////////////////////////////////////////////////

View file

@ -52,6 +52,7 @@ public:
bool overlap (const Range&) const;
bool encloses (const Range&) const;
bool startsWithin (const Range &) const;
bool endsWithin (const Range &) const;
Range intersect (const Range&) const;
bool intersects (const Range&) const;
Range combine (const Range&) const;

View file

@ -116,8 +116,8 @@ static void autoAdjust (
// implement overwrite resolution, i.e. the new interval overwrites existing intervals
for (auto& overlap : overlaps)
{
bool start_within_overlap = overlap.range.contains (interval.range.start);
bool end_within_overlap = interval.range.end != 0 && overlap.range.contains (interval.range.end);
bool start_within_overlap = interval.range.startsWithin (overlap.range);
bool end_within_overlap = interval.range.endsWithin (overlap.range);
if (start_within_overlap && !end_within_overlap)
{