OSDN Git Service

ブロックの終わりでも時刻をリセットするように変更
authorstarg <starg@users.osdn.me>
Tue, 6 Sep 2016 16:18:30 +0000 (01:18 +0900)
committerstarg <starg@users.osdn.me>
Tue, 6 Sep 2016 16:18:30 +0000 (01:18 +0900)
include/ir2midi/context.hpp
src/ast2ir/phrase2ir.cpp
src/ir2midi/context.cpp
src/ir2midi/ir2midi.cpp

index 498f67d..bc19119 100644 (file)
@@ -29,7 +29,7 @@ public:
         SetLastEventTime(lastEventTime);
     }
 
-    void EnterBlock();
+    void ResetTime();
     int GetLastEventTime();
     void SetLastEventTime(int t);
     void UpdateTime(int relativeTime);
index ae8806a..e42f59d 100644 (file)
@@ -127,6 +127,7 @@ std::vector<IR::Block::EventType> Phrase2IRCompiler::operator()(const AST::NoteS
             m_IR.Blocks[newIndex.ID].Events.insert(m_IR.Blocks[newIndex.ID].Events.end(), events.begin(), events.end());
         }
 
+        ResetTime();
         return {newIndex};
     }
 }
@@ -140,6 +141,7 @@ std::vector<IR::Block::EventType> Phrase2IRCompiler::operator()(const AST::NoteS
     AutoPop<decltype(m_AttributeStack)> autoPop(m_AttributeStack);
 
     Compile(ast.Block, newIndex);
+    ResetTime();
     return {newIndex};
 }
 
index 48a583d..55802a6 100644 (file)
@@ -9,7 +9,7 @@ namespace YAMML
 namespace IR2MIDI
 {
 
-void TrackCompilerContext::EnterBlock()
+void TrackCompilerContext::ResetTime()
 {
     m_BaseTimeForCurrentBlock = m_LastEventTime;
 }
index 368c508..11a4802 100644 (file)
@@ -241,7 +241,7 @@ bool IR2MIDICompiler::CompileTrackBlock(const std::string& trackBlockName)
 
 void IR2MIDICompiler::CompileBlock(int trackNumber, IR::BlockReference blockRef)
 {
-    GetTrackContext(trackNumber).EnterBlock();
+    GetTrackContext(trackNumber).ResetTime();
     const auto& block = m_IR.Blocks.at(blockRef.ID);
     CheckForUnprocessedAttributes(block.Attributes);
 
@@ -251,6 +251,8 @@ void IR2MIDICompiler::CompileBlock(int trackNumber, IR::BlockReference blockRef)
     {
         boost::apply_visitor(*this, varTrackNumber, i);
     }
+
+    GetTrackContext(trackNumber).ResetTime();
 }
 
 void IR2MIDICompiler::Finalize()