コード例 #1
0
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;
    }
}
コード例 #2
0
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;
    }
}
コード例 #3
0
OutboundPacketStream& OutboundPacketStream::operator<<( const MidiMessage& rhs )
{
    CheckForAvailableArgumentSpace(4);

    *(--typeTagsCurrent_) = MIDI_MESSAGE_TYPE_TAG;
    FromUInt32( argumentCurrent_, rhs );
    argumentCurrent_ += 4;

    return *this;
}
コード例 #4
0
OutboundPacketStream& OutboundPacketStream::operator<<( const RgbaColor& rhs )
{
    CheckForAvailableArgumentSpace(4);

    *(--typeTagsCurrent_) = RGBA_COLOR_TYPE_TAG;
    FromUInt32( argumentCurrent_, rhs );
    argumentCurrent_ += 4;

    return *this;
}
コード例 #5
0
	NxDeviceOscOutputMessage& NxDeviceOscOutputMessage::operator<<( const NxDeviceOscMidiMessage& rhs )
	{
		CheckForAvailableArgumentSpace(4);

		*(--typeTagsCurrent_) = MIDI_MESSAGE_TYPE_TAG;
		FromUInt32( argumentCurrent_, rhs );
		argumentCurrent_ += 4;

		return *this;
	}
コード例 #6
0
	NxDeviceOscOutputMessage& NxDeviceOscOutputMessage::operator<<( const NxDeviceOscRgbaColor& rhs )
	{
		CheckForAvailableArgumentSpace(4);

		*(--typeTagsCurrent_) = RGBA_COLOR_TYPE_TAG;
		FromUInt32( argumentCurrent_, rhs );
		argumentCurrent_ += 4;

		return *this;
	}
コード例 #7
0
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;
}