# HG changeset patch # User Chris Cannam # Date 1552471274 0 # Node ID 05e3ea2237f5af877732acd4a95246bd6a8c0d51 # Parent e8e51f3ca120346e50e9755b70c33e6b62db2424 Add getEventsWithin diff -r e8e51f3ca120 -r 05e3ea2237f5 base/EventSeries.cpp --- 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;