MAK RTIspy API Documentation for HLA 1516
metadata.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 2006 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *********************************************************************/
00005 /*********************************************************************
00006 ** $RCSfile: metadata.h,v $ $Revision: 1.8 $ $State: Exp $
00007 *********************************************************************/
00008 
00009 #ifndef DtRtiMetadata_H_
00010 #define DtRtiMetadata_H_
00011 
00016 
00017 #include <list>
00018 #include <internalTypes.h>
00019 #include "rtiMsg.h"
00020 
00021 #define DtMetadataAlignNone  0
00022 #define DtMetadataAlign16Bit 1
00023 #define DtMetadataAlign32Bit 3
00024 #define DtMetadataAlign64Bit 7
00025 
00026 typedef enum DtMetadataTypes_e
00027 {
00028    DtMetadataTypeNull             = 0,
00029    DtMetadataTypeDestinationList,
00030    DtMetadataTypeTransport,
00031    DtMetadataTypeMcastAddr,
00032    DtMetadataTypeFwderGroupId,
00033    DtMetadataTypeTestId,
00034    DtMetadataTypeTimeStampInitiatorSendInteraction,
00035    DtMetadataTypeTimeStampInitiatorNetSend,
00036    DtMetadataTypeTimeStampRecipientNetRead,
00037    DtMetadataTypeTimeStampRecipientAsynchronousQueue,
00038    DtMetadataTypeTimeStampRecipientReceiveInteraction,
00039    DtMetadataTypeTimeStampRecipientSendInteraction,
00040    DtMetadataTypeTimeStampRecipientNetSend,
00041    DtMetadataTypeTimeStampInitiatorNetRead,
00042    DtMetadataTypeTimeStampInitiatorAsynchronousQueue,
00043    DtMetadataTypeTimeStampInitiatorReceiveInteraction,
00044    DtMetadataTypeFederateStateInfo,
00045 
00046 
00047    DtMetadataTypeEnd              = 8191  
00048 
00049 } DtMetadataType;
00050 
00070 typedef struct DtMetadataHeader_s
00071 {
00072    union DtMetadataHeaderCtl_u
00073    {
00074       DtU16 allFields;
00075 
00076       struct DtMetadataHeaderCtl_s
00077       {
00078 #if DT_LITTLE_ENDIAN
00079          DtU16 type        : 13; 
00080          DtU16 hasPayload  :  1;
00081          DtU16 copy        :  1;
00082          DtU16 more        :  1;
00083 #else
00084          DtU16 more        :  1;
00085          DtU16 copy        :  1;
00086          DtU16 hasPayload  :  1;
00087          DtU16 type        : 13; 
00088 #endif //! DT_LITTLE_ENDIAN
00089 
00090       } field;
00091 
00092    } ctl;
00093 
00094    union DtMetadataHeaderLenOrVal_u
00095    {
00096       DtU16 val;
00097 
00098       struct DtMetadataHeaderPayloadLen_s
00099       {
00100 #if DT_LITTLE_ENDIAN
00101          DtU16 payloadLen        : 11;
00102          DtU16 pad               :  1;
00103          DtU16 alignPad          :  2;
00104          DtU16 payloadAlignment  :  2;
00105 #else
00106          DtU16 payloadAlignment  :  2;
00107          DtU16 alignPad          :  2;
00108          DtU16 pad               :  1;
00109          DtU16 payloadLen        : 11;
00110 #endif //! DT_LITTLE_ENDIAN
00111       } len;
00112 
00113    } lenOrVal;
00114 
00115 } DtMetadataNetHeader;
00116 
00119 
00122 class DT_DLL_LRC DtRtiMetadata
00123 {
00124 protected:
00125 
00126    typedef std::list< DtMetadataNetHeader* > DtMetadataHeaderList;
00127 
00128 public:
00129 
00131    DtRtiMetadata( caddr_t msg, DtMetadataType type );
00132    DtRtiMetadata( DtRtiMsg* msg, DtMetadataType type );
00133 
00135    virtual ~DtRtiMetadata();
00136 
00137 private:
00138 
00140    DtRtiMetadata(const DtRtiMetadata &);
00141 
00143    DtRtiMetadata& operator=(const DtRtiMetadata &);
00144 
00145 public:
00146 
00150    virtual bool locate( void** mdVal, unsigned int& size ) const;
00151 
00155    virtual bool nullify();
00156 
00160    virtual unsigned int remove();
00161 
00165    virtual unsigned int purge();
00166 
00168    virtual bool isCopyEnabled();
00169    virtual void setCopyEnable( bool copyEnable );
00170 
00178    virtual bool setLengthAsValue(unsigned int value);
00179 
00182    virtual bool getLengthAsValue(unsigned int &value) const;
00183 
00184 public:
00185 
00187    static unsigned int metadataMaxSize();
00188 
00189 protected:
00190 
00191    virtual DtMetadataNetHeader* getFirstHeader( ) const;
00192    virtual DtMetadataNetHeader* getHeaderByType( ) const;   
00193    virtual DtU16 compactMetadata( char* dst, DtMetadataHeaderList& retentionPool,
00194       bool newFinal );
00195 
00196 protected:
00197 
00200    // Returns boolean: type was found?
00201    static bool locate( char const* msg, DtMetadataType type,
00202       void** mdVal, unsigned int& size );
00203 
00205    static bool typeIsPresent( char const* msg, DtMetadataType type );
00206 
00207 
00208    static DtMetadataNetHeader* getFirstHeader(char const* msg);
00209    static DtMetadataNetHeader* getNextHeader( DtMetadataNetHeader* hdr );
00210    static DtMetadataNetHeader* getHeaderByType( char const* msg, DtMetadataType type );
00211 
00214    static void transmogrifyHeader( DtMetadataNetHeader& src, DtMetadataNetHeader& dest );
00215 
00218    static void reverseTransmogrifyHeader( DtMetadataNetHeader& src, DtMetadataNetHeader& dest );
00219 
00220    static unsigned int metadataSize( DtMetadataNetHeader& hdr );
00221    static unsigned int metadataPayloadSize( DtMetadataNetHeader& hdr );
00222 
00223 protected:
00224 
00225    DtRtiMsg *           myMsg;
00226    caddr_t              myMsgAddr;
00227    mutable unsigned int myMsgLen;
00228    char *               myStartAddr; 
00229    unsigned int         mySize;
00230    bool                 myCopyEnabled;
00231    const DtMetadataType myMetaDataType;
00232 
00233 protected:
00234 
00235    static unsigned int theMaxMetadataBufferSize;
00236 };
00237 
00238 #endif //! DtRtiMetadata_H_

Document ID: Generated on Thu Jun 14 14:15:04 EDT 2012 from SVN revision 116116
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)