| 
					
				 | 
			
			
				@@ -0,0 +1,62 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "BeatSequence.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <sstream> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace midi { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+BeatSequence::BeatSequence() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    : BeatSequence(0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+BeatSequence::BeatSequence(BeatIndex size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    : parent(size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void BeatSequence::expand(BeatIndex factor) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(factor < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        throw "factor may not be less than 1.";  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    resize(size() * factor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for(signed int targetIndex = (size() - factor); targetIndex > 0; targetIndex -= factor) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeatIndex sourceIndex = targetIndex / factor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        at(sourceIndex).swap(at(targetIndex));   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void BeatSequence::print(std::ostream& stream) const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    stream << "beat sequence:\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for(BeatIndex beatIndex = 0; beatIndex < size(); beatIndex++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        std::stringstream beatLabelStream; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        beatLabelStream << "beat #" << beatIndex << ": "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        std::string beatLabel = beatLabelStream.str(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        stream << beatLabel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        std::string spacer(beatLabel.size(), ' '); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const MessageList& beat = at(beatIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(beat.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            stream << "no message" << "\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for(MessageList::const_iterator msg_it = beat.begin(); msg_it != beat.end(); msg_it++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(msg_it != beat.begin()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    stream << spacer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                (*msg_it)->print(stream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    stream << "\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    stream.flush(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} // namepsace 
			 |