annotate external/oscpack/osc/OscPrintReceivedElements.cpp @ 644:16dfff1de47a

Fix scons build.
author ronw@google.com
date Tue, 11 Jun 2013 15:04:55 +0000
parents 0284d2152e17
children
rev   line source
tomwalters@509 1 /*
tomwalters@509 2 oscpack -- Open Sound Control packet manipulation library
tomwalters@509 3 http://www.audiomulch.com/~rossb/oscpack
tomwalters@509 4
tomwalters@509 5 Copyright (c) 2004-2005 Ross Bencina <rossb@audiomulch.com>
tomwalters@509 6
tomwalters@509 7 Permission is hereby granted, free of charge, to any person obtaining
tomwalters@509 8 a copy of this software and associated documentation files
tomwalters@509 9 (the "Software"), to deal in the Software without restriction,
tomwalters@509 10 including without limitation the rights to use, copy, modify, merge,
tomwalters@509 11 publish, distribute, sublicense, and/or sell copies of the Software,
tomwalters@509 12 and to permit persons to whom the Software is furnished to do so,
tomwalters@509 13 subject to the following conditions:
tomwalters@509 14
tomwalters@509 15 The above copyright notice and this permission notice shall be
tomwalters@509 16 included in all copies or substantial portions of the Software.
tomwalters@509 17
tomwalters@509 18 Any person wishing to distribute modifications to the Software is
tomwalters@509 19 requested to send the modifications to the original developer so that
tomwalters@509 20 they can be incorporated into the canonical version.
tomwalters@509 21
tomwalters@509 22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
tomwalters@509 23 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
tomwalters@509 24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
tomwalters@509 25 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
tomwalters@509 26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
tomwalters@509 27 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
tomwalters@509 28 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
tomwalters@509 29 */
tomwalters@509 30 #include "OscPrintReceivedElements.h"
tomwalters@509 31
tomwalters@509 32 #include <iostream>
tomwalters@509 33 #include <iomanip>
tomwalters@509 34 #include <ctime>
tomwalters@509 35
tomwalters@509 36
tomwalters@509 37 namespace osc{
tomwalters@509 38
tomwalters@509 39
tomwalters@509 40 std::ostream& operator<<( std::ostream & os,
tomwalters@509 41 const ReceivedMessageArgument& arg )
tomwalters@509 42 {
tomwalters@509 43 switch( arg.TypeTag() ){
tomwalters@509 44 case TRUE_TYPE_TAG:
tomwalters@509 45 os << "bool:true";
tomwalters@509 46 break;
tomwalters@509 47
tomwalters@509 48 case FALSE_TYPE_TAG:
tomwalters@509 49 os << "bool:false";
tomwalters@509 50 break;
tomwalters@509 51
tomwalters@509 52 case NIL_TYPE_TAG:
tomwalters@509 53 os << "(Nil)";
tomwalters@509 54 break;
tomwalters@509 55
tomwalters@509 56 case INFINITUM_TYPE_TAG:
tomwalters@509 57 os << "(Infinitum)";
tomwalters@509 58 break;
tomwalters@509 59
tomwalters@509 60 case INT32_TYPE_TAG:
tomwalters@509 61 os << "int32:" << arg.AsInt32Unchecked();
tomwalters@509 62 break;
tomwalters@509 63
tomwalters@509 64 case FLOAT_TYPE_TAG:
tomwalters@509 65 os << "float32:" << arg.AsFloatUnchecked();
tomwalters@509 66 break;
tomwalters@509 67
tomwalters@509 68 case CHAR_TYPE_TAG:
tomwalters@509 69 {
tomwalters@509 70 char s[2] = {0};
tomwalters@509 71 s[0] = arg.AsCharUnchecked();
tomwalters@509 72 os << "char:'" << s << "'";
tomwalters@509 73 }
tomwalters@509 74 break;
tomwalters@509 75
tomwalters@509 76 case RGBA_COLOR_TYPE_TAG:
tomwalters@509 77 {
tomwalters@509 78 uint32 color = arg.AsRgbaColorUnchecked();
tomwalters@509 79
tomwalters@509 80 os << "RGBA:0x"
tomwalters@509 81 << std::hex << std::setfill('0')
tomwalters@509 82 << std::setw(2) << (int)((color>>24) & 0xFF)
tomwalters@509 83 << std::setw(2) << (int)((color>>16) & 0xFF)
tomwalters@509 84 << std::setw(2) << (int)((color>>8) & 0xFF)
tomwalters@509 85 << std::setw(2) << (int)(color & 0xFF)
tomwalters@509 86 << std::setfill(' ');
tomwalters@509 87 os.unsetf(std::ios::basefield);
tomwalters@509 88 }
tomwalters@509 89 break;
tomwalters@509 90
tomwalters@509 91 case MIDI_MESSAGE_TYPE_TAG:
tomwalters@509 92 {
tomwalters@509 93 uint32 m = arg.AsMidiMessageUnchecked();
tomwalters@509 94 os << "midi (port, status, data1, data2):<<"
tomwalters@509 95 << std::hex << std::setfill('0')
tomwalters@509 96 << "0x" << std::setw(2) << (int)((m>>24) & 0xFF)
tomwalters@509 97 << " 0x" << std::setw(2) << (int)((m>>16) & 0xFF)
tomwalters@509 98 << " 0x" << std::setw(2) << (int)((m>>8) & 0xFF)
tomwalters@509 99 << " 0x" << std::setw(2) << (int)(m & 0xFF)
tomwalters@509 100 << std::setfill(' ') << ">>";
tomwalters@509 101 os.unsetf(std::ios::basefield);
tomwalters@509 102 }
tomwalters@509 103 break;
tomwalters@509 104
tomwalters@509 105 case INT64_TYPE_TAG:
tomwalters@509 106 os << "int64:" << arg.AsInt64Unchecked();
tomwalters@509 107 break;
tomwalters@509 108
tomwalters@509 109 case TIME_TAG_TYPE_TAG:
tomwalters@509 110 {
tomwalters@509 111 os << "OSC-timetag:" << arg.AsTimeTagUnchecked();
tomwalters@509 112
tomwalters@509 113 std::time_t t =
tomwalters@509 114 (unsigned long)( arg.AsTimeTagUnchecked() >> 32 );
tomwalters@509 115
tomwalters@509 116 // strip trailing newline from string returned by ctime
tomwalters@509 117 const char *timeString = std::ctime( &t );
tomwalters@509 118 size_t len = strlen( timeString );
tomwalters@509 119 char *s = new char[ len + 1 ];
tomwalters@509 120 strcpy( s, timeString );
tomwalters@509 121 if( len )
tomwalters@509 122 s[ len - 1 ] = '\0';
tomwalters@509 123
tomwalters@509 124 os << " " << s;
tomwalters@509 125 }
tomwalters@509 126 break;
tomwalters@509 127
tomwalters@509 128 case DOUBLE_TYPE_TAG:
tomwalters@509 129 os << "double:" << arg.AsDoubleUnchecked();
tomwalters@509 130 break;
tomwalters@509 131
tomwalters@509 132 case STRING_TYPE_TAG:
tomwalters@509 133 os << "OSC-string:`" << arg.AsStringUnchecked() << "'";
tomwalters@509 134 break;
tomwalters@509 135
tomwalters@509 136 case SYMBOL_TYPE_TAG:
tomwalters@509 137 os << "OSC-string (symbol):`" << arg.AsSymbolUnchecked() << "'";
tomwalters@509 138 break;
tomwalters@509 139
tomwalters@509 140 case BLOB_TYPE_TAG:
tomwalters@509 141 {
tomwalters@509 142 unsigned long size;
tomwalters@509 143 const void *data;
tomwalters@509 144 arg.AsBlobUnchecked( data, size );
tomwalters@509 145 os << "OSC-blob:<<" << std::hex << std::setfill('0');
tomwalters@509 146 unsigned char *p = (unsigned char*)data;
tomwalters@509 147 for( unsigned long i = 0; i < size; ++i ){
tomwalters@509 148 os << "0x" << std::setw(2) << int(p[i]);
tomwalters@509 149 if( i != size-1 )
tomwalters@509 150 os << ' ';
tomwalters@509 151 }
tomwalters@509 152 os.unsetf(std::ios::basefield);
tomwalters@509 153 os << ">>" << std::setfill(' ');
tomwalters@509 154 }
tomwalters@509 155 break;
tomwalters@509 156
tomwalters@509 157 default:
tomwalters@509 158 os << "unknown";
tomwalters@509 159 }
tomwalters@509 160
tomwalters@509 161 return os;
tomwalters@509 162 }
tomwalters@509 163
tomwalters@509 164
tomwalters@509 165 std::ostream& operator<<( std::ostream & os, const ReceivedMessage& m )
tomwalters@509 166 {
tomwalters@509 167
tomwalters@509 168 os << "[" << m.AddressPattern();
tomwalters@509 169 bool first = true;
tomwalters@509 170
tomwalters@509 171 for( ReceivedMessage::const_iterator i = m.ArgumentsBegin();
tomwalters@509 172 i != m.ArgumentsEnd(); ++i ){
tomwalters@509 173 if( first ){
tomwalters@509 174 os << " ";
tomwalters@509 175 first = false;
tomwalters@509 176 }else{
tomwalters@509 177 os << ", ";
tomwalters@509 178 }
tomwalters@509 179
tomwalters@509 180 os << *i;
tomwalters@509 181 }
tomwalters@509 182
tomwalters@509 183 os << "]";
tomwalters@509 184
tomwalters@509 185 return os;
tomwalters@509 186 }
tomwalters@509 187
tomwalters@509 188
tomwalters@509 189 std::ostream& operator<<( std::ostream & os, const ReceivedBundle& b )
tomwalters@509 190 {
tomwalters@509 191 static int indent = 0;
tomwalters@509 192
tomwalters@509 193 for( int j=0; j < indent; ++j )
tomwalters@509 194 os << " ";
tomwalters@509 195 os << "{ ( ";
tomwalters@509 196 if( b.TimeTag() == 1 )
tomwalters@509 197 os << "immediate";
tomwalters@509 198 else
tomwalters@509 199 os << b.TimeTag();
tomwalters@509 200 os << " )\n";
tomwalters@509 201
tomwalters@509 202 ++indent;
tomwalters@509 203
tomwalters@509 204 for( ReceivedBundle::const_iterator i = b.ElementsBegin();
tomwalters@509 205 i != b.ElementsEnd(); ++i ){
tomwalters@509 206 if( i->IsBundle() ){
tomwalters@509 207 ReceivedBundle b(*i);
tomwalters@509 208 os << b << "\n";
tomwalters@509 209 }else{
tomwalters@509 210 ReceivedMessage m(*i);
tomwalters@509 211 for( int j=0; j < indent; ++j )
tomwalters@509 212 os << " ";
tomwalters@509 213 os << m << "\n";
tomwalters@509 214 }
tomwalters@509 215 }
tomwalters@509 216
tomwalters@509 217 --indent;
tomwalters@509 218
tomwalters@509 219 for( int j=0; j < indent; ++j )
tomwalters@509 220 os << " ";
tomwalters@509 221 os << "}";
tomwalters@509 222
tomwalters@509 223 return os;
tomwalters@509 224 }
tomwalters@509 225
tomwalters@509 226
tomwalters@509 227 std::ostream& operator<<( std::ostream & os, const ReceivedPacket& p )
tomwalters@509 228 {
tomwalters@509 229 if( p.IsBundle() ){
tomwalters@509 230 ReceivedBundle b(p);
tomwalters@509 231 os << b << "\n";
tomwalters@509 232 }else{
tomwalters@509 233 ReceivedMessage m(p);
tomwalters@509 234 os << m << "\n";
tomwalters@509 235 }
tomwalters@509 236
tomwalters@509 237 return os;
tomwalters@509 238 }
tomwalters@509 239
tomwalters@509 240 } // namespace osc