Rename interpretor to interpreter.
[Faustine.git] / interpreter / preprocessor / faust-0.9.47mr3 / architecture / osclib / faust / src / osc / OSCStream.h
diff --git a/interpreter/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCStream.h b/interpreter/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/osc/OSCStream.h
new file mode 100644 (file)
index 0000000..5203808
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+  Copyright (c) Grame 2009
+
+  This library is free software; you can redistribute it and modify it under
+  the terms of the GNU Library General Public License as published by the
+  Free Software Foundation version 2 of the License, or any later version.
+
+  This library is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public License
+  for more details.
+
+  You should have received a copy of the GNU Library General Public License
+  along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+
+  Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France
+  research@grame.fr
+  
+*/
+
+#ifndef __OSCStream__
+#define __OSCStream__
+
+#include <string>
+#include <vector>
+
+#include "osc/OscOutboundPacketStream.h"
+#include "ip/UdpSocket.h"
+
+namespace oscfaust
+{
+
+//--------------------------------------------------------------------------
+typedef struct OSCStart { 
+       const char* fAddress;
+       OSCStart() {}
+       OSCStart(const char* a) : fAddress(a) {}
+} OSCStart;
+
+typedef struct OSCErr : public OSCStart { 
+       OSCErr() : OSCStart("error:") {}
+} OSCErr;
+
+typedef struct OSCWarn : public OSCStart { 
+       OSCWarn() : OSCStart("warning:") {}
+} OSCWarn;
+
+typedef struct OSCEnd {} OSCEnd;
+
+#define kLocalhost     0x7f000001
+
+//--------------------------------------------------------------------------
+/*!
+\brief OSC output streams
+*/
+class OSCStream 
+{
+       enum            { kOutBufferSize = 16384 };
+       enum state      { kIdle, kInProgress };
+       
+       state           fState;
+       int                     fPort;                          // the destination UDP port
+       unsigned long fAddress;                 // the destination IP address
+       char            fBuffer[kOutBufferSize];
+
+       osc::OutboundPacketStream       fOutStream;
+       UdpSocket*                                      fSocket;
+       
+//     void initSocket();
+       
+       public:
+       static bool start();
+       static void stop();
+
+                                OSCStream();
+                                OSCStream(UdpSocket* socket) 
+                                       : fState(kIdle), fPort(1024), fAddress(kLocalhost), fOutStream(fBuffer, kOutBufferSize), fSocket(socket) {} 
+               virtual ~OSCStream() {}
+               
+               osc::OutboundPacketStream& stream()                             { return fOutStream; }
+               int                                     getPort () const                        { return fPort; }
+               unsigned long           getAddress () const                     { return fAddress; }
+               UdpSocket*                      socket()                                        { return fSocket; }
+               int                                     state() const                           { return fState; }
+               
+               OSCStream&                      start(const char * address);
+               OSCStream&                      end();
+
+               void setPort (int port)                                                 { fPort = port; }
+               void setAddress (unsigned long address)                 { fAddress = address; }
+               void setAddress (const std::string& address);
+};
+
+                                               OSCStream& operator <<(OSCStream& s, OSCEnd val);
+                                               OSCStream& operator <<(OSCStream& s, const OSCStart& val);
+                                               OSCStream& operator <<(OSCStream& s, const OSCErr& val);
+                                               OSCStream& operator <<(OSCStream& s, const OSCWarn& val);
+                                               OSCStream& operator <<(OSCStream& s, const std::string& val);
+template <typename T>  OSCStream& operator <<(OSCStream& s, T val)             { s.stream() << val; return s; }
+template <typename T>  OSCStream& operator <<(OSCStream& s, const std::vector<T>& val)
+                                               { 
+                                                       for (unsigned int i =0; i < val.size(); i++) s << val[i];
+                                                       return s; 
+                                               }
+
+
+extern OSCStream* _oscout;             // OSC standard output stream
+extern OSCStream* _oscerr;             // OSC standard input stream
+
+#define oscout (*_oscout)
+#define oscerr (*_oscerr)
+
+} // end namespace
+
+#endif