void cVariant::serialize( cBufferedWriter& writer, unsigned int /*version*/ ) { writer.writeByte( typ ); char skipper[8]; switch ( typ ) { case InvalidType: writer.writeRaw( skipper, 8 ); break; case StringType: if ( value.ptr ) { writer.writeUtf8( *( QString * ) value.ptr ); } else { writer.writeUtf8( QString::null ); } writer.writeRaw( skipper, 4 ); break; case IntType: writer.writeInt( value.i ); writer.writeRaw( skipper, 4 ); break; case LongType: writer.writeInt( value.i ); writer.writeRaw( skipper, 4 ); break; case DoubleType: writer.writeDouble( value.d ); break; case BaseCharType: if ( value.ptr ) { writer.writeInt( ( ( P_CHAR ) value.ptr )->serial() ); } else { writer.writeInt( INVALID_SERIAL ); } writer.writeRaw( skipper, 4 ); break; case ItemType: if ( value.ptr ) { writer.writeInt( ( ( P_ITEM ) value.ptr )->serial() ); } else { writer.writeInt( INVALID_SERIAL ); } writer.writeRaw( skipper, 4 ); break; case CoordType: writer.writeShort( ( ( Coord * ) ( value.ptr ) )->x ); writer.writeShort( ( ( Coord * ) ( value.ptr ) )->y ); writer.writeByte( ( ( Coord * ) ( value.ptr ) )->z ); writer.writeByte( ( ( Coord * ) ( value.ptr ) )->map ); writer.writeRaw( skipper, 2 ); break; } }