| 
					
				 | 
			
			
				@@ -0,0 +1,59 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "CallbackClock.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace midi { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+CallbackClock::CallbackClock() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    : CallbackClock(0, 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+CallbackClock::CallbackClock(TickCallback tickCallback) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    : CallbackClock(tickCallback, 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+CallbackClock::CallbackClock(TickCallback callback, void* callbackData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    : tickCallback(callback), tickCallbackData(callbackData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+CallbackClock::TickCallback CallbackClock::getTickCallback() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallback_mutex.lock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TickCallback c = tickCallback; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallback_mutex.unlock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CallbackClock::setTickCallback(TickCallback c) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallback_mutex.lock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallback = c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallback_mutex.unlock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void* CallbackClock::getTickCallbackData() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallbackData_mutex.lock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    void* d = tickCallbackData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallbackData_mutex.unlock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return d; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CallbackClock::setTickCallbackData(void* d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallbackData_mutex.lock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallbackData = d; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tickCallbackData_mutex.unlock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CallbackClock::tick() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TickCallback c = getTickCallback(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(c) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        c(getTickCallbackData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 |