]> git.sesse.net Git - casparcg/blobdiff - protocol/osc/oscpack/OscPrintReceivedElements.cpp
set svn:eol-style native on .h and .cpp files
[casparcg] / protocol / osc / oscpack / OscPrintReceivedElements.cpp
index ea7b6628e0100c65eaa920a9d0ff2176e3392057..128cc59ff8bce02a6d78ed807f8987db3a1e69a2 100644 (file)
-/*\r
-       oscpack -- Open Sound Control packet manipulation library\r
-       http://www.audiomulch.com/~rossb/oscpack\r
-\r
-       Copyright (c) 2004-2005 Ross Bencina <rossb@audiomulch.com>\r
-\r
-       Permission is hereby granted, free of charge, to any person obtaining\r
-       a copy of this software and associated documentation files\r
-       (the "Software"), to deal in the Software without restriction,\r
-       including without limitation the rights to use, copy, modify, merge,\r
-       publish, distribute, sublicense, and/or sell copies of the Software,\r
-       and to permit persons to whom the Software is furnished to do so,\r
-       subject to the following conditions:\r
-\r
-       The above copyright notice and this permission notice shall be\r
-       included in all copies or substantial portions of the Software.\r
-\r
-       Any person wishing to distribute modifications to the Software is\r
-       requested to send the modifications to the original developer so that\r
-       they can be incorporated into the canonical version.\r
-\r
-       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-       EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-       MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
-       IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\r
-       ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\r
-       CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-*/\r
-#undef _CRT_SECURE_NO_WARNINGS\r
-#define _CRT_SECURE_NO_WARNINGS\r
-\r
-#include "OscPrintReceivedElements.h"\r
-\r
-#include <iostream>\r
-#include <iomanip>\r
-#include <ctime>\r
-#include <cstring>\r
-\r
-\r
-namespace osc{\r
-\r
-\r
-std::ostream& operator<<( std::ostream & os,\r
-        const ReceivedMessageArgument& arg )\r
-{\r
-    switch( arg.TypeTag() ){\r
-        case TRUE_TYPE_TAG:\r
-            os << "bool:true";\r
-            break;\r
-                \r
-        case FALSE_TYPE_TAG:\r
-            os << "bool:false";\r
-            break;\r
-\r
-        case NIL_TYPE_TAG:\r
-            os << "(Nil)";\r
-            break;\r
-\r
-        case INFINITUM_TYPE_TAG:\r
-            os << "(Infinitum)";\r
-            break;\r
-\r
-        case INT32_TYPE_TAG:\r
-            os << "int32:" << arg.AsInt32Unchecked();\r
-            break;\r
-\r
-        case FLOAT_TYPE_TAG:\r
-            os << "float32:" << arg.AsFloatUnchecked();\r
-            break;\r
-\r
-        case CHAR_TYPE_TAG:\r
-            {\r
-                char s[2] = {0};\r
-                s[0] = arg.AsCharUnchecked();\r
-                os << "char:'" << s << "'";\r
-            }\r
-            break;\r
-\r
-        case RGBA_COLOR_TYPE_TAG:\r
-            {\r
-                uint32 color = arg.AsRgbaColorUnchecked();\r
-                \r
-                os << "RGBA:0x"\r
-                        << std::hex << std::setfill('0')\r
-                        << std::setw(2) << (int)((color>>24) & 0xFF)\r
-                        << std::setw(2) << (int)((color>>16) & 0xFF)\r
-                        << std::setw(2) << (int)((color>>8) & 0xFF)\r
-                        << std::setw(2) << (int)(color & 0xFF)\r
-                        << std::setfill(' ');\r
-                os.unsetf(std::ios::basefield);\r
-            }\r
-            break;\r
-\r
-        case MIDI_MESSAGE_TYPE_TAG:\r
-            {\r
-                uint32 m = arg.AsMidiMessageUnchecked();\r
-                os << "midi (port, status, data1, data2):<<"\r
-                        << std::hex << std::setfill('0')\r
-                        << "0x" << std::setw(2) << (int)((m>>24) & 0xFF)\r
-                        << " 0x" << std::setw(2) << (int)((m>>16) & 0xFF)\r
-                        << " 0x" << std::setw(2) << (int)((m>>8) & 0xFF)\r
-                        << " 0x" << std::setw(2) << (int)(m & 0xFF)\r
-                        << std::setfill(' ') << ">>";\r
-                os.unsetf(std::ios::basefield);\r
-            }\r
-            break;\r
-                               \r
-        case INT64_TYPE_TAG:\r
-            os << "int64:" << arg.AsInt64Unchecked();\r
-            break;\r
-\r
-        case TIME_TAG_TYPE_TAG:\r
-            {\r
-                os << "OSC-timetag:" << arg.AsTimeTagUnchecked();\r
-\r
-                std::time_t t =\r
-                        (unsigned long)( arg.AsTimeTagUnchecked() >> 32 );\r
-\r
-                // strip trailing newline from string returned by ctime\r
-                const char *timeString = std::ctime( &t );\r
-                size_t len = strlen( timeString );\r
-                char *s = new char[ len + 1 ];\r
-                strcpy( s, timeString );\r
-                if( len )\r
-                    s[ len - 1 ] = '\0';\r
-                    \r
-                os << " " << s;\r
-            }\r
-            break;\r
-                \r
-        case DOUBLE_TYPE_TAG:\r
-            os << "double:" << arg.AsDoubleUnchecked();\r
-            break;\r
-\r
-        case STRING_TYPE_TAG:\r
-            os << "OSC-string:`" << arg.AsStringUnchecked() << "'";\r
-            break;\r
-                \r
-        case SYMBOL_TYPE_TAG: \r
-            os << "OSC-string (symbol):`" << arg.AsSymbolUnchecked() << "'";\r
-            break;\r
-\r
-        case BLOB_TYPE_TAG:\r
-            {\r
-                unsigned long size;\r
-                const void *data;\r
-                arg.AsBlobUnchecked( data, size );\r
-                os << "OSC-blob:<<" << std::hex << std::setfill('0');\r
-                unsigned char *p = (unsigned char*)data;\r
-                for( unsigned long i = 0; i < size; ++i ){\r
-                    os << "0x" << std::setw(2) << int(p[i]);\r
-                    if( i != size-1 )\r
-                        os << ' ';\r
-                }\r
-                os.unsetf(std::ios::basefield);\r
-                os << ">>" << std::setfill(' ');\r
-            }\r
-            break;\r
-\r
-        default:\r
-            os << "unknown";\r
-    }\r
-\r
-    return os;\r
-}\r
-\r
-\r
-std::ostream& operator<<( std::ostream & os, const ReceivedMessage& m )\r
-{\r
-    os << "[";\r
-    if( m.AddressPatternIsUInt32() )\r
-        os << m.AddressPatternAsUInt32();\r
-    else\r
-        os << m.AddressPattern();\r
-    \r
-    bool first = true;\r
-    for( ReceivedMessage::const_iterator i = m.ArgumentsBegin();\r
-            i != m.ArgumentsEnd(); ++i ){\r
-        if( first ){\r
-            os << " ";\r
-            first = false;\r
-        }else{\r
-            os << ", ";\r
-        }\r
-\r
-        os << *i;\r
-    }\r
-\r
-    os << "]";\r
-\r
-    return os;\r
-}\r
-\r
-\r
-std::ostream& operator<<( std::ostream & os, const ReceivedBundle& b )\r
-{\r
-    static int indent = 0;\r
-\r
-    for( int j=0; j < indent; ++j )\r
-        os << "  ";\r
-    os << "{ ( ";\r
-    if( b.TimeTag() == 1 )\r
-        os << "immediate";\r
-    else\r
-        os << b.TimeTag();\r
-    os << " )\n";\r
-\r
-    ++indent;\r
-    \r
-    for( ReceivedBundle::const_iterator i = b.ElementsBegin();\r
-            i != b.ElementsEnd(); ++i ){\r
-        if( i->IsBundle() ){\r
-            ReceivedBundle b(*i);\r
-            os << b << "\n";\r
-        }else{\r
-            ReceivedMessage m(*i);\r
-            for( int j=0; j < indent; ++j )\r
-                os << "  ";\r
-            os << m << "\n";\r
-        }\r
-    }\r
-\r
-    --indent;\r
-\r
-    for( int j=0; j < indent; ++j )\r
-        os << "  ";\r
-    os << "}";\r
-\r
-    return os;\r
-}\r
-\r
-\r
-std::ostream& operator<<( std::ostream & os, const ReceivedPacket& p )\r
-{\r
-    if( p.IsBundle() ){\r
-        ReceivedBundle b(p);\r
-        os << b << "\n";\r
-    }else{\r
-        ReceivedMessage m(p);\r
-        os << m << "\n";\r
-    }\r
-\r
-    return os;\r
-}\r
-\r
-} // namespace osc\r
+/*
+       oscpack -- Open Sound Control packet manipulation library
+       http://www.audiomulch.com/~rossb/oscpack
+
+       Copyright (c) 2004-2005 Ross Bencina <rossb@audiomulch.com>
+
+       Permission is hereby granted, free of charge, to any person obtaining
+       a copy of this software and associated documentation files
+       (the "Software"), to deal in the Software without restriction,
+       including without limitation the rights to use, copy, modify, merge,
+       publish, distribute, sublicense, and/or sell copies of the Software,
+       and to permit persons to whom the Software is furnished to do so,
+       subject to the following conditions:
+
+       The above copyright notice and this permission notice shall be
+       included in all copies or substantial portions of the Software.
+
+       Any person wishing to distribute modifications to the Software is
+       requested to send the modifications to the original developer so that
+       they can be incorporated into the canonical version.
+
+       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+       EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+       MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+       IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+       ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+       CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+       WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#undef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS
+
+#include "OscPrintReceivedElements.h"
+
+#include <iostream>
+#include <iomanip>
+#include <ctime>
+#include <cstring>
+
+
+namespace osc{
+
+
+std::ostream& operator<<( std::ostream & os,
+        const ReceivedMessageArgument& arg )
+{
+    switch( arg.TypeTag() ){
+        case TRUE_TYPE_TAG:
+            os << "bool:true";
+            break;
+                
+        case FALSE_TYPE_TAG:
+            os << "bool:false";
+            break;
+
+        case NIL_TYPE_TAG:
+            os << "(Nil)";
+            break;
+
+        case INFINITUM_TYPE_TAG:
+            os << "(Infinitum)";
+            break;
+
+        case INT32_TYPE_TAG:
+            os << "int32:" << arg.AsInt32Unchecked();
+            break;
+
+        case FLOAT_TYPE_TAG:
+            os << "float32:" << arg.AsFloatUnchecked();
+            break;
+
+        case CHAR_TYPE_TAG:
+            {
+                char s[2] = {0};
+                s[0] = arg.AsCharUnchecked();
+                os << "char:'" << s << "'";
+            }
+            break;
+
+        case RGBA_COLOR_TYPE_TAG:
+            {
+                uint32 color = arg.AsRgbaColorUnchecked();
+                
+                os << "RGBA:0x"
+                        << std::hex << std::setfill('0')
+                        << std::setw(2) << (int)((color>>24) & 0xFF)
+                        << std::setw(2) << (int)((color>>16) & 0xFF)
+                        << std::setw(2) << (int)((color>>8) & 0xFF)
+                        << std::setw(2) << (int)(color & 0xFF)
+                        << std::setfill(' ');
+                os.unsetf(std::ios::basefield);
+            }
+            break;
+
+        case MIDI_MESSAGE_TYPE_TAG:
+            {
+                uint32 m = arg.AsMidiMessageUnchecked();
+                os << "midi (port, status, data1, data2):<<"
+                        << std::hex << std::setfill('0')
+                        << "0x" << std::setw(2) << (int)((m>>24) & 0xFF)
+                        << " 0x" << std::setw(2) << (int)((m>>16) & 0xFF)
+                        << " 0x" << std::setw(2) << (int)((m>>8) & 0xFF)
+                        << " 0x" << std::setw(2) << (int)(m & 0xFF)
+                        << std::setfill(' ') << ">>";
+                os.unsetf(std::ios::basefield);
+            }
+            break;
+                               
+        case INT64_TYPE_TAG:
+            os << "int64:" << arg.AsInt64Unchecked();
+            break;
+
+        case TIME_TAG_TYPE_TAG:
+            {
+                os << "OSC-timetag:" << arg.AsTimeTagUnchecked();
+
+                std::time_t t =
+                        (unsigned long)( arg.AsTimeTagUnchecked() >> 32 );
+
+                // strip trailing newline from string returned by ctime
+                const char *timeString = std::ctime( &t );
+                size_t len = strlen( timeString );
+                char *s = new char[ len + 1 ];
+                strcpy( s, timeString );
+                if( len )
+                    s[ len - 1 ] = '\0';
+                    
+                os << " " << s;
+            }
+            break;
+                
+        case DOUBLE_TYPE_TAG:
+            os << "double:" << arg.AsDoubleUnchecked();
+            break;
+
+        case STRING_TYPE_TAG:
+            os << "OSC-string:`" << arg.AsStringUnchecked() << "'";
+            break;
+                
+        case SYMBOL_TYPE_TAG: 
+            os << "OSC-string (symbol):`" << arg.AsSymbolUnchecked() << "'";
+            break;
+
+        case BLOB_TYPE_TAG:
+            {
+                unsigned long size;
+                const void *data;
+                arg.AsBlobUnchecked( data, size );
+                os << "OSC-blob:<<" << std::hex << std::setfill('0');
+                unsigned char *p = (unsigned char*)data;
+                for( unsigned long i = 0; i < size; ++i ){
+                    os << "0x" << std::setw(2) << int(p[i]);
+                    if( i != size-1 )
+                        os << ' ';
+                }
+                os.unsetf(std::ios::basefield);
+                os << ">>" << std::setfill(' ');
+            }
+            break;
+
+        default:
+            os << "unknown";
+    }
+
+    return os;
+}
+
+
+std::ostream& operator<<( std::ostream & os, const ReceivedMessage& m )
+{
+    os << "[";
+    if( m.AddressPatternIsUInt32() )
+        os << m.AddressPatternAsUInt32();
+    else
+        os << m.AddressPattern();
+    
+    bool first = true;
+    for( ReceivedMessage::const_iterator i = m.ArgumentsBegin();
+            i != m.ArgumentsEnd(); ++i ){
+        if( first ){
+            os << " ";
+            first = false;
+        }else{
+            os << ", ";
+        }
+
+        os << *i;
+    }
+
+    os << "]";
+
+    return os;
+}
+
+
+std::ostream& operator<<( std::ostream & os, const ReceivedBundle& b )
+{
+    static int indent = 0;
+
+    for( int j=0; j < indent; ++j )
+        os << "  ";
+    os << "{ ( ";
+    if( b.TimeTag() == 1 )
+        os << "immediate";
+    else
+        os << b.TimeTag();
+    os << " )\n";
+
+    ++indent;
+    
+    for( ReceivedBundle::const_iterator i = b.ElementsBegin();
+            i != b.ElementsEnd(); ++i ){
+        if( i->IsBundle() ){
+            ReceivedBundle b(*i);
+            os << b << "\n";
+        }else{
+            ReceivedMessage m(*i);
+            for( int j=0; j < indent; ++j )
+                os << "  ";
+            os << m << "\n";
+        }
+    }
+
+    --indent;
+
+    for( int j=0; j < indent; ++j )
+        os << "  ";
+    os << "}";
+
+    return os;
+}
+
+
+std::ostream& operator<<( std::ostream & os, const ReceivedPacket& p )
+{
+    if( p.IsBundle() ){
+        ReceivedBundle b(p);
+        os << b << "\n";
+    }else{
+        ReceivedMessage m(p);
+        os << m << "\n";
+    }
+
+    return os;
+}
+
+} // namespace osc