Mercurial > hg > svcore
diff base/EventSeries.cpp @ 1636:05e3ea2237f5 single-point
Add getEventsWithin
author | Chris Cannam |
---|---|
date | Wed, 13 Mar 2019 10:01:14 +0000 |
parents | 6ac92836cd86 |
children | b57a75aa5ae3 |
line wrap: on
line diff
--- a/base/EventSeries.cpp Wed Mar 13 10:01:02 2019 +0000 +++ b/base/EventSeries.cpp Wed Mar 13 10:01:14 2019 +0000 @@ -230,6 +230,33 @@ } EventVector +EventSeries::getEventsWithin(sv_frame_t frame, + sv_frame_t duration) const +{ + EventVector span; + + const sv_frame_t start = frame; + const sv_frame_t end = frame + duration; + + // because we don't need to "look back" at events that started + // earlier than the start of the given range, we can do this + // entirely from m_events + + auto pitr = lower_bound(m_events.begin(), m_events.end(), + Event(start)); + while (pitr != m_events.end() && pitr->getFrame() < end) { + if (!pitr->hasDuration()) { + span.push_back(*pitr); + } else if (pitr->getFrame() + pitr->getDuration() <= end) { + span.push_back(*pitr); + } + ++pitr; + } + + return span; +} + +EventVector EventSeries::getEventsCovering(sv_frame_t frame) const { EventVector cover;