comparison 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
comparison
equal deleted inserted replaced
1635:e8e51f3ca120 1636:05e3ea2237f5
228 228
229 return span; 229 return span;
230 } 230 }
231 231
232 EventVector 232 EventVector
233 EventSeries::getEventsWithin(sv_frame_t frame,
234 sv_frame_t duration) const
235 {
236 EventVector span;
237
238 const sv_frame_t start = frame;
239 const sv_frame_t end = frame + duration;
240
241 // because we don't need to "look back" at events that started
242 // earlier than the start of the given range, we can do this
243 // entirely from m_events
244
245 auto pitr = lower_bound(m_events.begin(), m_events.end(),
246 Event(start));
247 while (pitr != m_events.end() && pitr->getFrame() < end) {
248 if (!pitr->hasDuration()) {
249 span.push_back(*pitr);
250 } else if (pitr->getFrame() + pitr->getDuration() <= end) {
251 span.push_back(*pitr);
252 }
253 ++pitr;
254 }
255
256 return span;
257 }
258
259 EventVector
233 EventSeries::getEventsCovering(sv_frame_t frame) const 260 EventSeries::getEventsCovering(sv_frame_t frame) const
234 { 261 {
235 EventVector cover; 262 EventVector cover;
236 263
237 // first find any zero-duration events 264 // first find any zero-duration events