# HG changeset patch # User Chris Cannam # Date 1552474502 0 # Node ID b57a75aa5ae338d2344b8675cb80ad1f0f3b78f9 # Parent e8099be647261f0acc599d7e0ddc827bdb5ee0ed Add getEventsStartingWithin diff -r e8099be64726 -r b57a75aa5ae3 base/EventSeries.cpp --- a/base/EventSeries.cpp Wed Mar 13 10:54:42 2019 +0000 +++ b/base/EventSeries.cpp Wed Mar 13 10:55:02 2019 +0000 @@ -257,6 +257,29 @@ } EventVector +EventSeries::getEventsStartingWithin(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) { + span.push_back(*pitr); + ++pitr; + } + + return span; +} + +EventVector EventSeries::getEventsCovering(sv_frame_t frame) const { EventVector cover; diff -r e8099be64726 -r b57a75aa5ae3 base/EventSeries.h --- a/base/EventSeries.h Wed Mar 13 10:54:42 2019 +0000 +++ b/base/EventSeries.h Wed Mar 13 10:55:02 2019 +0000 @@ -95,6 +95,19 @@ sv_frame_t duration) const; /** + * Retrieve all events starting within the range in frames defined + * by the given frame f and duration d. + * + * - An event without duration starts within the range if its own + * frame is greater than or equal to f and less than f + d. + * + * - An event with duration starts within the range if its start + * frame is greater than or equal to f. + */ + EventVector getEventsStartingWithin(sv_frame_t frame, + sv_frame_t duration) const; + + /** * Retrieve all events that cover the given frame. An event without * duration covers a frame if its own frame is equal to it. An event * with duration covers a frame if its start frame is less than or