Mercurial > hg > svcore
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 |