void OutboundPacketStream::EndElement( char *endPtr ) { assert( elementSizePtr_ != 0 ); if( elementSizePtr_ == reinterpret_cast<uint32*>(data_) ){ elementSizePtr_ = 0; }else{ // while building an element, an offset to the containing element's // size slot is stored in the elements size slot (or a ptr to data_ // if there is no containing element). We retrieve that here //uint32 *previousElementSizePtr = // (uint32*)(data_ + *reinterpret_cast<uint32*>(elementSizePtr_)); uint32 *previousElementSizePtr = (uint32*)(data_ + *elementSizePtr_); // then we store the element size in the slot, note that the element // size does not include the size slot, hence the - 4 below. uint32 elementSize = (endPtr - reinterpret_cast<char*>(elementSizePtr_)) - 4; FromUInt32( reinterpret_cast<char*>(elementSizePtr_), elementSize ); // finally, we reset the element size ptr to the containing element elementSizePtr_ = previousElementSizePtr; } }
void OutboundPacketStream::EndElement( char *endPtr ) { assert( elementSizePtr_ != 0 ); if( elementSizePtr_ == reinterpret_cast<uint32*>(data_) ){ elementSizePtr_ = 0; }else{ // while building an element, an offset to the containing element's // size slot is stored in the elements size slot (or a ptr to data_ // if there is no containing element). We retrieve that here uint32 *previousElementSizePtr = reinterpret_cast<uint32*>(data_ + *elementSizePtr_); // then we store the element size in the slot. note that the element // size does not include the size slot, hence the - 4 below. std::ptrdiff_t d = endPtr - reinterpret_cast<char*>(elementSizePtr_); // assert( d >= 4 && d <= 0x7FFFFFFF ); // assume packets smaller than 2Gb uint32 elementSize = static_cast<uint32>(d - 4); FromUInt32( reinterpret_cast<char*>(elementSizePtr_), elementSize ); // finally, we reset the element size ptr to the containing element elementSizePtr_ = previousElementSizePtr; } }
OutboundPacketStream& OutboundPacketStream::operator<<( const MidiMessage& rhs ) { CheckForAvailableArgumentSpace(4); *(--typeTagsCurrent_) = MIDI_MESSAGE_TYPE_TAG; FromUInt32( argumentCurrent_, rhs ); argumentCurrent_ += 4; return *this; }
OutboundPacketStream& OutboundPacketStream::operator<<( const RgbaColor& rhs ) { CheckForAvailableArgumentSpace(4); *(--typeTagsCurrent_) = RGBA_COLOR_TYPE_TAG; FromUInt32( argumentCurrent_, rhs ); argumentCurrent_ += 4; return *this; }
NxDeviceOscOutputMessage& NxDeviceOscOutputMessage::operator<<( const NxDeviceOscMidiMessage& rhs ) { CheckForAvailableArgumentSpace(4); *(--typeTagsCurrent_) = MIDI_MESSAGE_TYPE_TAG; FromUInt32( argumentCurrent_, rhs ); argumentCurrent_ += 4; return *this; }
NxDeviceOscOutputMessage& NxDeviceOscOutputMessage::operator<<( const NxDeviceOscRgbaColor& rhs ) { CheckForAvailableArgumentSpace(4); *(--typeTagsCurrent_) = RGBA_COLOR_TYPE_TAG; FromUInt32( argumentCurrent_, rhs ); argumentCurrent_ += 4; return *this; }
OutboundPacketStream& OutboundPacketStream::operator<<( const Blob& rhs ) { CheckForAvailableArgumentSpace( 4 + RoundUp4(rhs.size) ); *(--typeTagsCurrent_) = BLOB_TYPE_TAG; FromUInt32( argumentCurrent_, rhs.size ); argumentCurrent_ += 4; memcpy( argumentCurrent_, rhs.data, rhs.size ); argumentCurrent_ += rhs.size; // zero pad to 4-byte boundary unsigned long i = rhs.size; while( i & 0x3 ){ *argumentCurrent_++ = '\0'; ++i; } return *this; }