diff --git a/include/core/timeline.h b/include/core/timeline.h index 8ac60ef..5be8d44 100644 --- a/include/core/timeline.h +++ b/include/core/timeline.h @@ -15,7 +15,9 @@ template ::const_iterator Iterator; @@ -24,30 +26,30 @@ class Timeline _current_offset = offset; expire(_top_note); - if (!_timeline.empty()) + if (_timeline.empty()) + return; + + Iterator head_iterator = _timeline.begin(); + + while (!isExpired(head_iterator)) { - Iterator head_iterator = _timeline.begin(); - - while (!isExpired(head_iterator)) + if ((*head_iterator)->getPerfectOffset() >= offset) { - if ((*head_iterator)->getPerfectOffset() >= offset) - { - Iterator pre_head = head_iterator; - --pre_head; + Iterator pre_head = head_iterator; + --pre_head; - _top_note = - !isExpired(pre_head) && (*pre_head)->isActive(offset) - ? pre_head - : head_iterator; - break; - } - - ++head_iterator; + _top_note = + !isExpired(pre_head) && (*pre_head)->isActive(offset) + ? pre_head + : head_iterator; + break; } - if (isExpired(_top_note)) - _top_note = _timeline.begin(); + ++head_iterator; } + + if (isExpired(_top_note)) + _top_note = _timeline.begin(); } void setNotes(const std::set ¬es) @@ -128,11 +130,20 @@ class Timeline iterator = _timeline.end(); } - inline Iterator getTopNote() const noexcept { return _top_note; } + inline Iterator getTopNote() const noexcept + { + return _top_note; + } - inline Iterator begin() const noexcept { return _timeline.begin(); } + inline Iterator begin() const noexcept + { + return _timeline.begin(); + } - inline Iterator end() const noexcept { return _timeline.end(); } + inline Iterator end() const noexcept + { + return _timeline.end(); + } private: std::set _timeline;