diff src/portaudio/bindings/cpp/include/portaudiocpp/CppFunCallbackStream.hxx @ 4:e13257ea84a4

Add bzip2, zlib, liblo, portaudio sources
author Chris Cannam
date Wed, 20 Mar 2013 13:59:52 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/portaudio/bindings/cpp/include/portaudiocpp/CppFunCallbackStream.hxx	Wed Mar 20 13:59:52 2013 +0000
@@ -0,0 +1,86 @@
+#ifndef INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX
+#define INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX
+
+// ---------------------------------------------------------------------------------------
+
+#include "portaudio.h"
+
+#include "portaudiocpp/CallbackStream.hxx"
+
+// ---------------------------------------------------------------------------------------
+
+// Forward declaration(s):
+namespace portaudio
+{
+	class StreamParameters;
+}
+
+// ---------------------------------------------------------------------------------------
+
+// Declaration(s):
+namespace portaudio
+{
+
+
+	namespace impl
+	{
+		extern "C"
+		{
+			int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, 
+				const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, 
+				void *userData);
+		} // extern "C"
+	}
+
+	// -----------------------------------------------------------------------------------
+
+	//////
+	/// @brief Callback stream using a C++ function (either a free function or a static function) 
+	/// callback.
+	//////
+	class FunCallbackStream : public CallbackStream
+	{
+	public:
+		typedef int (*CallbackFunPtr)(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, 
+			const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, 
+			void *userData);
+
+		// -------------------------------------------------------------------------------
+
+		//////
+		/// @brief Simple structure containing a function pointer to the C++ callback function and a 
+		/// (void) pointer to the user supplied data.
+		//////
+		struct CppToCCallbackData
+		{
+			CppToCCallbackData();
+			CppToCCallbackData(CallbackFunPtr funPtr, void *userData);
+			void init(CallbackFunPtr funPtr, void *userData);
+
+			CallbackFunPtr funPtr;
+			void *userData;
+		};
+
+		// -------------------------------------------------------------------------------
+
+		FunCallbackStream();
+		FunCallbackStream(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
+		~FunCallbackStream();
+
+		void open(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
+
+	private:
+		FunCallbackStream(const FunCallbackStream &); // non-copyable
+		FunCallbackStream &operator=(const FunCallbackStream &); // non-copyable
+
+		CppToCCallbackData adapterData_;
+
+		void open(const StreamParameters &parameters);
+	};
+
+
+} // portaudio
+
+// ---------------------------------------------------------------------------------------
+
+#endif // INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX