OSDN Git Service

ブロックの終わりでも時刻をリセットするように変更
[yamml/yamml-git.git] / src / ir2midi / context.cpp
1
2 #include <algorithm>
3
4 #include <ir2midi/context.hpp>
5
6 namespace YAMML
7 {
8
9 namespace IR2MIDI
10 {
11
12 void TrackCompilerContext::ResetTime()
13 {
14     m_BaseTimeForCurrentBlock = m_LastEventTime;
15 }
16
17 int TrackCompilerContext::GetLastEventTime()
18 {
19     return m_LastEventTime;
20 }
21
22 void TrackCompilerContext::SetLastEventTime(int t)
23 {
24     m_LastEventTime = t;
25     m_BaseTimeForCurrentBlock = t;
26 }
27
28 void TrackCompilerContext::UpdateTime(int relativeTime)
29 {
30     m_LastEventTime = m_BaseTimeForCurrentBlock + relativeTime;
31 }
32
33 void TrackCompilerContext::PushEvent(int relativeTime, const MIDI::MIDIEvent::EventType& ev)
34 {
35     UpdateTime(relativeTime);
36     m_Events.push_back(AbsoluteMIDIEvent{m_LastEventTime, ev});
37 }
38
39 void TrackCompilerContext::SortEvents()
40 {
41     std::stable_sort(
42         m_Events.begin(),
43         m_Events.end(),
44         [] (auto&& lhs, auto&& rhs)
45         {
46             return lhs.AbsoluteTime < rhs.AbsoluteTime;
47         }
48     );
49 }
50
51 const std::vector<AbsoluteMIDIEvent>& TrackCompilerContext::GetEvents() const
52 {
53     return m_Events;
54 }
55
56 } // namespace IR2MIDI
57
58 } // namespace YAMML