VR-Link API Documentation for HLA 1.3
objClassDesc1516.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_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    
00088    virtual const RTI::AttributeHandleSet& attrHandleSet() const;
00089 
00091    virtual const RTI::AttributeHandleSet& ownAttrHandles() const;
00092 
00099    virtual bool classNeededByFederation();
00100 
00105    virtual void publish();
00106    virtual void publish(const RTI::AttributeHandleSet& hSet);
00107 
00109    virtual void unpublish();
00110 
00115 
00117    virtual void subscribe(std::wstring const& updateRateDesignator = L"", bool active = true ); 
00118    virtual void subscribe(const DtDDMRegionSet& region, 
00119       std::wstring const& updateRateDesignator = L"", bool active = true ); 
00120    virtual void subscribe(const RTI::AttributeHandleSet& hSet, 
00121       std::wstring const& updateRateDesignator = L"",
00122       bool active = true );
00124    virtual void subscribe(const RTI::AttributeHandleSet& hSet, DtDDMRegionSP region,
00125       std::wstring const& updateRateDesignator = L"", bool active = true);
00126    
00127 
00128    virtual void passiveSubscribe();
00129 
00131    virtual void unsubscribe();
00132    virtual void unsubscribe(const DtDDMRegionSet& regionSet);
00133 
00136    virtual void requestUpdates();
00137    virtual void requestUpdates(const DtDDMRegionSet& region);
00138    virtual void requestUpdates(const RTI::AttributeHandleSet& hSet);
00139    virtual void requestUpdates(const RTI::AttributeHandleSet& hSet, 
00140       DtDDMRegionSP region);
00141 
00145    virtual const RTI::AttributeHandleSet& publishedAttrs() const;
00146    
00149    virtual bool everPublished() const;
00150 
00154    virtual const RTI::AttributeHandleSet& subscribedAttrs() const;
00155 
00156    virtual const RTI::AttributeHandleSet& attributesWithSpace() const;
00157    virtual const RTI::AttributeHandleSet& attributesWithoutSpace() const;
00158 
00159    virtual const RTI::AttributeHandleSet& subscribedAttrsWithSpace() const;
00160    virtual const RTI::AttributeHandleSet& subscribedAttrsWithoutSpace() const;
00161 
00162 
00165    virtual bool everSubscribed() const;
00166 
00168    virtual DtVrlRtiAmbassador* rtiAmb();
00169 
00171    virtual DtVrlFederateAmbassador* fedAmb();
00172 
00174    virtual RTI::AttributeHandle privilegeHandle() const;
00175 
00176    virtual void setUserTagModifier(DtObjectTagModifierSP modifier);
00177    virtual DtObjectTagModifierSP userTagModifier();
00178 
00179 
00186    virtual void setSubscribeToUnspecifiedAttributesFlag(bool subscribe);
00187    virtual bool subscribeToUnspecifiedAttributesFlag();
00188 
00194    virtual void setUnknownAttributeEncoder(
00195       DtHlaStateEncoder::DtAttributeEncoder encoder);
00196 
00199    virtual void setUnknownAttributeDecoder(
00200       DtHlaStateDecoder::DtAttributeDecoder decoder);
00201 
00203    virtual DtHlaStateEncoder::DtAttributeEncoder unknownAttributeEncoder();
00204 
00206    virtual DtHlaStateDecoder::DtAttributeDecoder unknownAttributeDecoder();
00207 
00208 
00209 public:
00215    static void setSubscriptionTimeDelay(double delay);
00216 
00217 protected:
00218 
00220    static void startRegCb(RTI::ObjectClassHandle h,
00221       void* usr);
00222 
00224    static void stopRegCb(RTI::ObjectClassHandle h,
00225       void* usr);
00226 
00227    static void ddmDisabled();
00228 
00229 protected:
00230 
00232    virtual void processStartReg(RTI::ObjectClassHandle h);
00233 
00235    virtual void processStopReg(RTI::ObjectClassHandle h);
00236 
00238    virtual DtObjClassDesc* self() const;
00239 
00242    virtual void synchSubscribedAttributes();
00243 
00246    virtual void fillInAttributeHandleSetRegionHandleSetPairVector(
00247       const RTI::AttributeHandleSet& hSet, DtDDMRegionSP region, 
00248       RTI::AttributeHandleSetRegionHandleSetPairVector& pairVector);
00249 
00250 protected:
00251    DtString myName;
00252    RTI::ObjectClassHandle myHandle;
00253    RTI::AttributeHandleSet* myAttrs;
00254    RTI::AttributeHandleSet* myOwnAttrs;
00255    RTI::AttributeHandleSet* mySubAttrs;
00256    RTI::AttributeHandleSet* myPubAttrs;
00257 
00259    RTI::AttributeHandleSet* myAttrsWithSpace;
00260 
00262    RTI::AttributeHandleSet* myAttrsWithoutSpace;
00263 
00264    RTI::AttributeHandleSet* mySubAttrsWithSpace;
00265    RTI::AttributeHandleSet* mySubAttrsWithoutSpace;
00266 
00267    bool myClassNeeded;
00268    DtObjClassDesc* myBase;
00269    DtExerciseConn* myExConn;
00270    bool myPublished;
00271    bool myEverPublished;
00272    bool myEverSubscribed;
00273    int myNumSubscribeRequests;
00274    bool mySubscribeToUnspecifiedAttributesFlag;
00275 
00277    RTI::AttributeHandle myPrivHandle;
00278    RTI::AttributeHandle myMinAttrHand;
00279    RTI::AttributeHandle myMaxAttrHand;
00280 
00281    typedef std::map<RTI::AttributeHandle, DtString> StringToAttributeHandleMap;
00282    StringToAttributeHandleMap myStringToHandleMap;
00283 
00284    DtObjectTagModifierSP myTagModifier;
00285 
00286    typedef std::vector<RTI::AttributeHandleSetRegionHandleSetPair> 
00287       RegionHandleVector;
00288    RegionHandleVector mySubscribedRegions;
00289 
00290    DtHlaStateEncoder::DtAttributeEncoder myUnknownAttributeEncoder;
00291    DtHlaStateDecoder::DtAttributeDecoder myUnknownAttributeDecoder;
00292 
00293 protected:
00294 
00295    static bool theDdmEnabled;
00296    static double theSubscriptionTimeDelay;
00297 };
00298 
00299 inline RTI::ObjectClassHandle DtObjClassDesc::handle() const
00300 { 
00301    return myHandle; 
00302 }
00303 
00304 inline const RTI::AttributeHandleSet& DtObjClassDesc::attrHandleSet() const
00305 {
00306    return *myAttrs;
00307 }
00308 
00309 inline const RTI::AttributeHandleSet& DtObjClassDesc::ownAttrHandles() const
00310 {
00311    return *myOwnAttrs;
00312 }
00313 
00314 inline const char* DtObjClassDesc::name() const
00315 {
00316    return myName.c_str();
00317 }
00318 
00319 inline int DtObjClassDesc::numAttributes() const
00320 {
00321    return (int)myAttrs->size();
00322 }
00323 
00324 inline const DtObjClassDesc* DtObjClassDesc::baseClass() const
00325 {
00326    return myBase;
00327 }
00328 
00329 inline DtObjClassDesc* DtObjClassDesc::baseClass()
00330 {
00331    return myBase;
00332 }
00333 
00334 inline DtObjClassDesc* DtObjClassDesc::self() const
00335 {
00336    return (DtObjClassDesc*) this;
00337 }
00338 
00339 inline RTI::AttributeHandle DtObjClassDesc::privilegeHandle() const
00340 {
00341    return myPrivHandle;
00342 }
00343 
00344 inline void DtObjClassDesc::setSubscriptionTimeDelay(double delay)
00345 {
00346    theSubscriptionTimeDelay = delay;
00347 }
00348 
00349 #endif
00350 
00351 

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)