VR-Link API Documentation for HLA 1.3
objClassDesc13.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 *********************************************************************/
00005 
00006 
00009 
00010 #pragma once
00011 
00012 #if DtHLA && !DtHLA_1516
00013 
00014 
00015 #include <vlutil/vlMachineTypes.h>
00016 #include <vlutil/vlString.h>
00017 #include "hStateEncoder.h"
00018 #include "hStateDecoder.h"
00019 #include "rtiNamespace.h"
00020 #include "region.h"
00021 #include "userTagModifiers.h"
00022 #include <map>
00023 
00024 class DtExerciseConn;
00025 class DtVrlFederateAmbassador;
00026 class DtVrlRtiAmbassador;
00027 
00040 class DT_DLL_VL DtObjClassDesc
00041 {
00042 public:
00043 
00046    DtObjClassDesc(const char* className, 
00047       DtObjClassDesc* base, 
00048       RTI::ObjectClassHandle handle,
00049       DtExerciseConn* exConn);
00050 
00052    virtual ~DtObjClassDesc();
00053 
00055    virtual void addAttr(const char* attrName, bool withSpace = false);
00056 
00058    virtual RTI::ObjectClassHandle handle() const;
00059 
00061    virtual RTI::AttributeHandle attributeHandleByName(const char *attrName) const;
00062 
00064    virtual DtString attributeNameByHandle(const RTI::AttributeHandle& hand) const;
00065 
00067    virtual const char* name() const;
00068 
00070    virtual const DtObjClassDesc* baseClass() const;
00071 
00073    virtual DtObjClassDesc* baseClass();
00074 
00077    virtual int isOfClass(RTI::ObjectClassHandle hand) const;
00078 
00081    virtual int numAttributes() const;
00082 
00084    virtual bool hasAttribute(const char* attrName) const;
00085    
00087    virtual int minAttrHandle() const;
00088    virtual int maxAttrHandle() const;
00089 
00092    virtual const RTI::AttributeHandleSet& attrHandleSet() const;
00093 
00095    virtual const RTI::AttributeHandleSet& ownAttrHandles() const;
00096 
00103    virtual bool classNeededByFederation();
00104 
00109    virtual void publish();
00110    virtual void publish(const RTI::AttributeHandleSet& hSet);
00111 
00113    virtual void unpublish();
00114 
00118    virtual void subscribe(const RTI::AttributeHandleSet& hSet, bool active = true);
00119    
00123    virtual void subscribe(const RTI::AttributeHandleSet& hSet, DtDDMRegionSP region,
00124       bool active = true);
00125 
00126    virtual void subscribe();
00127    virtual void subscribe(const DtDDMRegionSet& regionSet);
00128 
00129    virtual void passiveSubscribe();
00130 
00132    virtual void unsubscribe();
00133    virtual void unsubscribe(const DtDDMRegionSet& regionSet);
00134 
00137    virtual void requestUpdates();
00138    virtual void requestUpdates(const DtDDMRegionSet& region);
00139    virtual void requestUpdates(const RTI::AttributeHandleSet& hSet);
00140    virtual void requestUpdates(const RTI::AttributeHandleSet& hSet, 
00141       DtDDMRegionSP region);
00142 
00146    virtual const RTI::AttributeHandleSet& publishedAttrs() const;
00147    
00150    virtual bool everPublished() const;
00151 
00155    virtual const RTI::AttributeHandleSet& subscribedAttrs() const;
00156 
00157    virtual const RTI::AttributeHandleSet& attributesWithSpace() const;
00158    virtual const RTI::AttributeHandleSet& attributesWithoutSpace() const;
00159 
00160    virtual const RTI::AttributeHandleSet& subscribedAttrsWithSpace() const;
00161    virtual const RTI::AttributeHandleSet& subscribedAttrsWithoutSpace() const;
00162 
00163 
00166    virtual bool everSubscribed() const;
00167 
00169    virtual DtVrlRtiAmbassador* rtiAmb();
00170 
00172    virtual DtVrlFederateAmbassador* fedAmb();
00173 
00175    virtual RTI::AttributeHandle privilegeHandle() const;
00176 
00177    virtual void setUserTagModifier(DtObjectTagModifierSP modifier);
00178    virtual DtObjectTagModifierSP userTagModifier();
00179 
00180 
00187    virtual void setSubscribeToUnspecifiedAttributesFlag(bool subscribe);
00188    virtual bool subscribeToUnspecifiedAttributesFlag();
00189 
00195    virtual void setUnknownAttributeEncoder(
00196       DtHlaStateEncoder::DtAttributeEncoder encoder);
00197 
00200    virtual void setUnknownAttributeDecoder(
00201       DtHlaStateDecoder::DtAttributeDecoder decoder);
00202 
00204    virtual DtHlaStateEncoder::DtAttributeEncoder unknownAttributeEncoder();
00205 
00207    virtual DtHlaStateDecoder::DtAttributeDecoder unknownAttributeDecoder();
00208 
00209 public:
00212    static void setMaxAttributes(int num);
00213    static int maxAttributes();
00214 
00220    static void setSubscriptionTimeDelay(double delay);
00221 
00222 protected:
00223 
00225    static void startRegCb(RTI::ObjectClassHandle h,
00226       void* usr);
00227 
00229    static void stopRegCb(RTI::ObjectClassHandle h,
00230       void* usr);
00231 
00232 protected:
00233 
00235    virtual void processStartReg(RTI::ObjectClassHandle h);
00236 
00238    virtual void processStopReg(RTI::ObjectClassHandle h);
00239 
00241    virtual DtObjClassDesc* self() const;
00242 
00245    virtual void synchSubscribedAttributes();
00246 
00247 protected:
00248    DtString myName;
00249    RTI::ObjectClassHandle myHandle;
00250    RTI::AttributeHandleSet* myAttrs;
00251    RTI::AttributeHandleSet* myOwnAttrs;
00252    RTI::AttributeHandleSet* mySubAttrs;
00253    RTI::AttributeHandleSet* myPubAttrs;
00254 
00256    RTI::AttributeHandleSet* myAttrsWithSpace;
00257 
00259    RTI::AttributeHandleSet* myAttrsWithoutSpace;
00260 
00261    RTI::AttributeHandleSet* mySubAttrsWithSpace;
00262    RTI::AttributeHandleSet* mySubAttrsWithoutSpace;
00263 
00264    bool myClassNeeded;
00265    DtObjClassDesc* myBase;
00266    DtExerciseConn* myExConn;
00267    bool myPublished;
00268    bool myEverPublished;
00269    bool myEverSubscribed;
00270    int myNumSubscribeRequests;
00271    bool mySubscribeToUnspecifiedAttributesFlag;
00272 
00274    RTI::AttributeHandle myPrivHandle;
00275    RTI::AttributeHandle myMinAttrHand;
00276    RTI::AttributeHandle myMaxAttrHand;
00277 
00278    typedef std::map<RTI::AttributeHandle, DtString> StringToAttributeHandleMap;
00279    StringToAttributeHandleMap myStringToHandleMap;
00280 
00281    DtObjectTagModifierSP myTagModifier;
00282    std::vector<DtDDMRegionSP> mySubscribedRegions;
00283    DtHlaStateEncoder::DtAttributeEncoder myUnknownAttributeEncoder;
00284    DtHlaStateDecoder::DtAttributeDecoder myUnknownAttributeDecoder;
00285 protected:
00286    static int theMaxAttrs;
00287    static double theSubscriptionTimeDelay;
00288 
00289 };
00290 
00291 inline RTI::ObjectClassHandle DtObjClassDesc::handle() const
00292 { 
00293    return myHandle; 
00294 }
00295 
00296 inline const RTI::AttributeHandleSet& DtObjClassDesc::attrHandleSet() const
00297 {
00298    return *myAttrs;
00299 }
00300 
00301 inline const RTI::AttributeHandleSet& DtObjClassDesc::ownAttrHandles() const
00302 {
00303    return *myOwnAttrs;
00304 }
00305 
00306 inline int DtObjClassDesc::maxAttributes()
00307 {
00308    return theMaxAttrs;
00309 }
00310 
00311 inline void DtObjClassDesc::setMaxAttributes(int num)
00312 {
00313    theMaxAttrs = num;
00314 }
00315 
00316 inline const char* DtObjClassDesc::name() const
00317 {
00318    return myName.c_str();
00319 }
00320 
00321 inline int DtObjClassDesc::numAttributes() const
00322 {
00323    return myAttrs->size();
00324 }
00325 
00326 inline const DtObjClassDesc* DtObjClassDesc::baseClass() const
00327 {
00328    return myBase;
00329 }
00330 
00331 inline DtObjClassDesc* DtObjClassDesc::baseClass()
00332 {
00333    return myBase;
00334 }
00335 
00336 inline DtObjClassDesc* DtObjClassDesc::self() const
00337 {
00338    return (DtObjClassDesc*) this;
00339 }
00340 
00341 inline RTI::AttributeHandle DtObjClassDesc::privilegeHandle() const
00342 {
00343    return myPrivHandle;
00344 }
00345 
00346 inline void DtObjClassDesc::setSubscriptionTimeDelay(double delay)
00347 {
00348    theSubscriptionTimeDelay = delay;
00349 }
00350 
00351 #endif
00352 
00353 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)