
/*
  WARNING: THIS FILE IS AUTO-GENERATED. DO NOT MODIFY.

  This file was generated from .idl using "rtiddsgen".
  The rtiddsgen tool is part of the RTI Data Distribution Service distribution.
  For more information, type 'rtiddsgen -help' at a command shell
  or consult the RTI Data Distribution Service manual.
*/
    
package com.rti.perftest.gen;
        

import com.rti.dds.cdr.CdrEncapsulation;
import com.rti.dds.cdr.CdrInputStream;
import com.rti.dds.cdr.CdrOutputStream;
import com.rti.dds.cdr.CdrPrimitiveType;
import com.rti.dds.cdr.CdrBuffer;
import com.rti.dds.cdr.CdrHelper;
import com.rti.dds.domain.DomainParticipant;
import com.rti.dds.publication.DataWriter;
import com.rti.dds.publication.DataWriterListener;
import com.rti.dds.subscription.DataReader;
import com.rti.dds.subscription.DataReaderListener;
import com.rti.dds.topic.KeyHash_t;
import com.rti.dds.topic.TypeSupportImpl;
import com.rti.dds.topic.TypeSupportType;
import com.rti.dds.util.Sequence;
import com.rti.dds.topic.DefaultEndpointData;
import com.rti.dds.infrastructure.RETCODE_ERROR;

    
import com.rti.dds.topic.TypeSupportParticipantInfo;
import com.rti.dds.topic.TypeSupportEndpointInfo;
import com.rti.dds.typecode.TypeCode;

    
import com.rti.dds.infrastructure.Copyable;


/**
 * A collection of useful methods for dealing with objects of type
 * TestData_t.
 */
public class TestData_tTypeSupport extends TypeSupportImpl {
    // -----------------------------------------------------------------------
    // Private Fields
    // -----------------------------------------------------------------------

    private static final String TYPE_NAME = "TestData_t";

    private static final char[] PLUGIN_VERSION = {2, 0, 0, 0};

    private static final TestData_tTypeSupport _singleton
        = new TestData_tTypeSupport();
    
    // -----------------------------------------------------------------------
    // Public Methods
    // -----------------------------------------------------------------------

    // --- External methods: -------------------------------------------------
    /* The methods in this section are for use by users of RTI Data
     * Distribution Service.
     */

    public static String get_type_name() {
        return _singleton.get_type_nameI();
    }

    public static void register_type(DomainParticipant participant,
                                     String type_name) {
        _singleton.register_typeI(participant, type_name);
    }

    public static void unregister_type(DomainParticipant participant,
                                       String type_name) {
        _singleton.unregister_typeI(participant, type_name);
    }

    
     /* The methods in this section are for use by RTI Data Distribution
     * Service itself and by the code generated by rtiddsgen for other types.
     * They should be used directly or modified only by advanced users and are
     * subject to change in future versions of RTI Data Distribution Service.
     */
    public static TestData_tTypeSupport get_instance() {
        return _singleton;
    }

    public static TestData_tTypeSupport getInstance() {
        return get_instance();
    }

    public Object create_data() {
        return new TestData_t();
    }

    public void destroy_data(Object data) {
        return;
    }

    public Object create_key() {
        return new TestData_t();
    }

    public void destroy_key(Object key) {
        return;
    }


    /**
     * This is a concrete implementation of this method inherited from the base class.
     * This method will perform a deep copy of <code>source</code> into
     * <code>destination</code>.
     * 
     * @param src The Object which contains the data to be copied.
     * @return Returns <code>destination</code>.
     * @exception NullPointerException If <code>destination</code> or 
     * <code>source</code> is null.
     * @exception ClassCastException If either <code>destination</code> or
     * <code>this</code> is not a <code>TestData_t</code>
     * type.
     */
    public Object copy_data(Object destination, Object source) {
        TestData_t typedDst = (TestData_t) destination;
        TestData_t typedSrc = (TestData_t) source;

        return typedDst.copy_from(typedSrc);
    
    }


    
    public long get_serialized_sample_max_size(Object endpoint_data,boolean include_encapsulation,short encapsulation_id,long currentAlignment) {
        long origAlignment = currentAlignment;

        long encapsulation_size = currentAlignment;


        if(include_encapsulation) {
          if (!CdrEncapsulation.isValidEncapsulationKind(encapsulation_id)) {
              throw new RETCODE_ERROR("Unsupported encapsulation");
          }

          encapsulation_size += CdrPrimitiveType.SHORT.getMaxSizeSerialized(encapsulation_size);
          encapsulation_size += CdrPrimitiveType.SHORT.getMaxSizeSerialized(encapsulation_size);
          encapsulation_size -= currentAlignment;
          currentAlignment = 0;
          origAlignment = 0;

        }

 

        currentAlignment +=  CdrPrimitiveType.BYTE.getArrayMaxSizeSerialized(currentAlignment, ((com.rti.perftest.gen.KEY_SIZE.VALUE)));
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.BYTE.getSequenceMaxSizeSerialized(currentAlignment, ((com.rti.perftest.gen.MAX_BINDATA_SIZE.VALUE)));
            
        if (include_encapsulation) {
            currentAlignment += encapsulation_size;
        }
    
        return currentAlignment - origAlignment;
    }

    
    public long get_serialized_sample_min_size(Object endpoint_data,boolean include_encapsulation,short encapsulation_id,long currentAlignment) {
        long origAlignment = currentAlignment;

        long encapsulation_size = currentAlignment;
       
    
        if(include_encapsulation) {
            if (!CdrEncapsulation.isValidEncapsulationKind(encapsulation_id)) {
                throw new RETCODE_ERROR("Unsupported encapsulation");
            }

            encapsulation_size += CdrPrimitiveType.SHORT.getMaxSizeSerialized(encapsulation_size);
            encapsulation_size += CdrPrimitiveType.SHORT.getMaxSizeSerialized(encapsulation_size);
            encapsulation_size -= currentAlignment;
            currentAlignment = 0;
            origAlignment = 0;

        }
        
        
        currentAlignment +=  CdrPrimitiveType.BYTE.getArrayMaxSizeSerialized(currentAlignment, ((com.rti.perftest.gen.KEY_SIZE.VALUE)));
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.INT.getMaxSizeSerialized(currentAlignment);
            
        currentAlignment +=  CdrPrimitiveType.BYTE.getSequenceMaxSizeSerialized(currentAlignment, 0);
            
        if (include_encapsulation) {
            currentAlignment += encapsulation_size;
        }
    
        return currentAlignment - origAlignment;
    }

    
    public long get_serialized_sample_size(
	Object endpoint_data, boolean include_encapsulation, 
        short encapsulation_id, long current_alignment,
	Object sample) 
    {
        long origAlignment = current_alignment;

        long encapsulation_size = current_alignment;
        TestData_t typedSrc = (TestData_t) sample;
    
        if(include_encapsulation) {
            if (!CdrEncapsulation.isValidEncapsulationKind(encapsulation_id)) {
                throw new RETCODE_ERROR("Unsupported encapsulation");
            }


            encapsulation_size += CdrPrimitiveType.SHORT.getMaxSizeSerialized(encapsulation_size);
            encapsulation_size += CdrPrimitiveType.SHORT.getMaxSizeSerialized(encapsulation_size);
            encapsulation_size -= current_alignment;
            current_alignment = 0;
            origAlignment = 0;

        }
        

        current_alignment += CdrPrimitiveType.BYTE.getArrayMaxSizeSerialized(current_alignment, ((com.rti.perftest.gen.KEY_SIZE.VALUE)));
            
        current_alignment += CdrPrimitiveType.INT.getMaxSizeSerialized(current_alignment);
            
        current_alignment += CdrPrimitiveType.INT.getMaxSizeSerialized(current_alignment);
            
        current_alignment += CdrPrimitiveType.INT.getMaxSizeSerialized(current_alignment);
            
        current_alignment += CdrPrimitiveType.INT.getMaxSizeSerialized(current_alignment);
            
        current_alignment += CdrPrimitiveType.INT.getMaxSizeSerialized(current_alignment);
            
        current_alignment += CdrPrimitiveType.BYTE.getSequenceSerializedSize(current_alignment, typedSrc.bin_data);
            
        if (include_encapsulation) {
            current_alignment += encapsulation_size;
        }

        return current_alignment - origAlignment;
    }

    
    public long get_serialized_key_max_size(
        Object endpoint_data,
        boolean include_encapsulation, 
        short encapsulation_id,
        long currentAlignment) 
    {

        long encapsulation_size = currentAlignment;

        long origAlignment = currentAlignment;
                

        if(include_encapsulation) {
            if (!CdrEncapsulation.isValidEncapsulationKind(encapsulation_id)) {
                throw new RETCODE_ERROR("Unsupported encapsulation");
            }


            encapsulation_size += CdrPrimitiveType.SHORT.getMaxSizeSerialized(encapsulation_size);
            encapsulation_size += CdrPrimitiveType.SHORT.getMaxSizeSerialized(encapsulation_size);
            encapsulation_size -= currentAlignment;
            currentAlignment = 0;
            origAlignment = 0;

        }


    currentAlignment += get_serialized_sample_max_size(
                            endpoint_data,false,encapsulation_id,currentAlignment);
    
        if (include_encapsulation) {
            currentAlignment += encapsulation_size;
        }


        return currentAlignment - origAlignment;
    }

    
    public void serialize(Object endpoint_data,Object src, CdrOutputStream dst,boolean serialize_encapsulation,
                          short encapsulation_id, boolean serialize_sample, Object endpoint_plugin_qos) {
        int position = 0;

        
        if(serialize_encapsulation) {
            dst.serializeAndSetCdrEncapsulation(encapsulation_id);;


            position = dst.resetAlignment();

        }


        if(serialize_sample) {
TestData_t typedSrc = (TestData_t) src;    

        
        for(int i1__ = 0; i1__ < (com.rti.perftest.gen.KEY_SIZE.VALUE); ++i1__) {
        
            dst.writeByte(typedSrc.key[i1__]);                
        
        }
                                                  
            
        dst.writeInt(typedSrc.entity_id);        
            
        dst.writeInt(typedSrc.seq_num);        
            
        dst.writeInt(typedSrc.timestamp_sec);        
            
        dst.writeInt(typedSrc.timestamp_usec);        
            
        dst.writeInt(typedSrc.latency_ping);        
            
        dst.writeByteSeq(typedSrc.bin_data);
            
        }


        if (serialize_encapsulation) {
          dst.restoreAlignment(position);
        }

    }
 
    
    public void serialize_key(
        Object endpoint_data,
        Object src,
        CdrOutputStream dst,
        boolean serialize_encapsulation,
        short encapsulation_id,
        boolean serialize_key,
        Object endpoint_plugin_qos) 
    {
        int position = 0;

        if (serialize_encapsulation) {
            dst.serializeAndSetCdrEncapsulation(encapsulation_id);


            position = dst.resetAlignment();

        }

        if (serialize_key) {
TestData_t typedSrc = (TestData_t) src;    

            serialize(endpoint_data, src, dst, false, CdrEncapsulation.CDR_ENCAPSULATION_ID_CDR_BE, true, endpoint_plugin_qos);
    
        }


        if (serialize_encapsulation) {
            dst.restoreAlignment(position);
        }

    }

    
    public Object deserialize_sample(
        Object endpoint_data,
        Object dst, 
        CdrInputStream src, boolean deserialize_encapsulation,
        boolean deserialize_sample,
        Object endpoint_plugin_qos) 
    {
        int position = 0;

        
        if(deserialize_encapsulation) {
            src.deserializeAndSetCdrEncapsulation();


            position = src.resetAlignment();

        }

        if(deserialize_sample) {
TestData_t typedDst = (TestData_t) dst;

            
        for(int i1__ = 0; i1__ < (com.rti.perftest.gen.KEY_SIZE.VALUE); ++i1__) {
        
                typedDst.key[i1__] = src.readByte();        
            
        }
                                                  
            
            typedDst.entity_id = src.readInt();
            
            typedDst.seq_num = src.readInt();
            
            typedDst.timestamp_sec = src.readInt();
            
            typedDst.timestamp_usec = src.readInt();
            
            typedDst.latency_ping = src.readInt();
            
            src.readByteSequence(typedDst.bin_data);
            
        }


        if (deserialize_encapsulation) {
            src.restoreAlignment(position);
        }


        return dst;
    }


    
    public Object deserialize_key_sample(
        Object endpoint_data,
        Object dst,
        CdrInputStream src,
        boolean deserialize_encapsulation,
        boolean deserialize_key,
        Object endpoint_plugin_qos) 
    {
        int position = 0;


        if(deserialize_encapsulation) {
            src.deserializeAndSetCdrEncapsulation();


            position = src.resetAlignment();

        }

        if(deserialize_key) {
TestData_t typedDst = (TestData_t) dst;


        deserialize_sample(endpoint_data, dst, src, false, true, endpoint_plugin_qos);
    
        }


        if (deserialize_encapsulation) {
            src.restoreAlignment(position);
        }


        return dst;
    }

    
    public void skip(Object endpoint_data, 
                     CdrInputStream src,
                     boolean skip_encapsulation, 
                     boolean skip_sample, 
                     Object endpoint_plugin_qos)
    {
        int position = 0;


        if (skip_encapsulation) {
            src.skipEncapsulation();


            position = src.resetAlignment();

        }

        if (skip_sample) {

            
        for(int i1__ = 0; i1__ < (com.rti.perftest.gen.KEY_SIZE.VALUE); ++i1__) {
        
            src.skipByte();        
            
        }
                                                  
            
            src.skipInt();
            
            src.skipInt();
            
            src.skipInt();
            
            src.skipInt();
            
            src.skipInt();
            
            src.skipByteSequence();
            
        }


        if (skip_encapsulation) {
            src.restoreAlignment(position);
        }

    }

    public Object serialized_sample_to_key(
        Object endpoint_data,
        Object sample,
        CdrInputStream src, 
        boolean deserialize_encapsulation,  
        boolean deserialize_key, 
        Object endpoint_plugin_qos) 
    {
        int position = 0;


        if(deserialize_encapsulation) {
            src.deserializeAndSetCdrEncapsulation();

            position = src.resetAlignment();

        }

        if (deserialize_key) {
TestData_t typedDst = (TestData_t) sample;


            deserialize_sample(
                endpoint_data, sample, src, false, 
                true, endpoint_plugin_qos);

        }


        if (deserialize_encapsulation) {
            src.restoreAlignment(position);
        }


        return sample;
    }



    // -----------------------------------------------------------------------
    // Callbacks
    // -----------------------------------------------------------------------

    public Object on_participant_attached(Object registration_data,
                                          TypeSupportParticipantInfo participant_info,
                                          boolean top_level_registration,
                                          Object container_plugin_context,
                                          TypeCode type_code) {
        return super.on_participant_attached(
            registration_data, participant_info, top_level_registration,
            container_plugin_context, type_code);
    }

    public void on_participant_detached(Object participant_data) {
        super.on_participant_detached(participant_data);
    }

    public Object on_endpoint_attached(Object participantData,
                                       TypeSupportEndpointInfo endpoint_info,
                                       boolean top_level_registration,
                                       Object container_plugin_context) {
        return super.on_endpoint_attached(
              participantData,  endpoint_info,  
              top_level_registration, container_plugin_context);        
    }

    public void on_endpoint_detached(Object endpoint_data) {
        super.on_endpoint_detached(endpoint_data);
    }

    // -----------------------------------------------------------------------
    // Protected Methods
    // -----------------------------------------------------------------------

    protected DataWriter create_datawriter(long native_writer,
                                           DataWriterListener listener,
                                           int mask) {
        
        return new TestData_tDataWriter(native_writer, listener, mask, this);                
            
    }

    protected DataReader create_datareader(long native_reader,
                                           DataReaderListener listener,
                                           int mask) {
        
        return new TestData_tDataReader(native_reader, listener, mask, this);                
            
    }

    // -----------------------------------------------------------------------
    // Constructor
    // -----------------------------------------------------------------------

    protected TestData_tTypeSupport() {
        
        /* If the user data type supports keys, then the second argument
        to the constructor below should be true.  Otherwise it should
        be false. */        

        super(TYPE_NAME, false,TestData_tTypeCode.VALUE,TestData_t.class,TypeSupportType.TST_STRUCT, PLUGIN_VERSION);
    
    }

    protected TestData_tTypeSupport(boolean enableKeySupport) {
    
        super(TYPE_NAME, enableKeySupport,TestData_tTypeCode.VALUE,TestData_t.class,TypeSupportType.TST_STRUCT, PLUGIN_VERSION);
    }
}
