VR-Link API Documentation for DIS
dRefObjList.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 #ifndef DtDisReflectedObjectList_H_
00011 #define DtDisReflectedObjectList_H_
00012 
00013 #if DtDIS
00014 
00015 
00016 #include <vlutil/vlMachineTypes.h>
00017 #include <vlutil/vlTime.h>
00018 #include "refObjCbInfo.h"
00019 #include <vlutil/vlHashlist.h>
00020 
00021 class DT_DLL_VL DtExerciseConn;
00022 class DT_DLL_VL DtHlaObject;
00023 class DT_DLL_VL DtStateMsg;
00024 class DT_DLL_VL DtReflectedObject;
00025 class DT_DLL_VL DtBaseHashKey;
00026 
00027 typedef bool (*DtDiscoveryCondition)(DtReflectedObject* refObj, void* usr);
00028 
00034 class DT_DLL_VL DtReflectedObjectList
00035 {
00036 
00037 public:
00038 
00040    DtReflectedObjectList(DtExerciseConn* exConn);
00041 
00044    virtual ~DtReflectedObjectList();
00045 
00047    virtual DtReflectedObject* firstObj() const;
00048    virtual DtReflectedObject* lastObj() const;
00049 
00051   virtual int count() const;
00052 
00054    virtual DtReflectedObject* lookupObj(const DtBaseHashKey& key) const;
00055 
00057    virtual DtExerciseConn* exerciseConn() const;
00058 
00060    virtual void addObjectAdditionCallback(
00061       DtReflectedObjectCallbackFunction cb, void* userData);
00062    virtual void removeObjectAdditionCallback(
00063       DtReflectedObjectCallbackFunction cb, void* userData);
00064 
00066    virtual void addObjectRemovalCallback(
00067       DtReflectedObjectCallbackFunction cb, void* userData);
00068    virtual void removeObjectRemovalCallback(
00069       DtReflectedObjectCallbackFunction cb, void* userData);
00070 
00072    virtual void print() const;
00073 
00076    virtual void setTimeoutProcessing(bool onOff);
00077 
00079    virtual void setTimeoutInterval(DtTime time);
00080    virtual DtTime timeoutInterval();
00081 
00084    virtual void setDiscoveryCondition(DtDiscoveryCondition fn, void* usr);
00085 
00088    virtual void clearDiscoveryCondition();
00089 
00090 protected:
00091 
00093    DtReflectedObjectList(const DtReflectedObjectList& orig);
00094 
00096    DtReflectedObjectList& operator=(const DtReflectedObjectList& orig);
00097 
00098 protected:
00099 
00101    virtual DtReflectedObject* newReflectedObj(const DtStateMsg& msg) = 0;
00102 
00104    virtual DtReflectedObject* processStateMessage(const DtStateMsg& msg);
00105 
00109    virtual void doTimeouts();
00110 
00113    virtual void removeAndDelete(DtReflectedObject* obj,
00114       char* msg = NULL);
00115 
00120    virtual void objectAdded(DtReflectedObject* object);
00121 
00124    virtual bool shouldBeTimedOut(DtReflectedObject* object);
00125 
00129    void emptyLists();
00130    void emptyCallbackLists();
00131 
00133    virtual void processObjectAdditionCallbacks(
00134       DtReflectedObject* object);
00135    virtual void processObjectRemovalCallbacks(
00136       DtReflectedObject* object);
00137 
00139    virtual const DtBaseHashKey&
00140       hashKeyFromStateMessage(const DtStateMsg* msg) = 0;
00141 
00144    virtual int acceptPdu(const DtStateMsg&) const;
00145 
00148   virtual bool readyToAdd(DtReflectedObject* obj);
00149 
00150 protected:
00151 
00153    static void doTimeoutsPostDrainCb(void* usr);
00154 
00155 protected:
00156 
00157    DtExerciseConn* myExConn;
00158    DtIntrusiveList myObjectAddedCallbacks;
00159    DtIntrusiveList myObjectRemovedCallbacks;
00160    DtIntrusiveList myObjectList;
00161    DtIntrusiveList myWaitList;
00162    DtHashlist myObjectHashlist;
00163    DtHashlist myWaitHashlist;
00164    DtTime myTimeoutInterval;
00165    bool myTimeoutProcessingFlag;
00166    DtDiscoveryCondition myDiscoveryCondition;
00167    void* myDiscoveryConditionParameter;
00168 };
00169 
00170 #endif   //! DtHLA
00171 #endif   //! DtReflectedObjectList_H_
00172 

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)