VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
reflectedObjectListDIS.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1992-2013 VT MAK
3 ** All rights reserved.
4 *********************************************************************/
5 
6 
9 
10 #pragma once
11 
12 #if DtDIS
13 
14 
15 #include <vlutil/vlMachineTypes.h>
16 #include <vlutil/vlTime.h>
18 #include <vlutil/vlHashlist.h>
19 #include <vl/attributePdu.h>
20 #include <set>
21 
24 class DT_DLL_VL DtStateMsg;
29 
30 typedef bool (*DtDiscoveryCondition)(DtReflectedObject* refObj, void* usr);
31 typedef std::map<DtSimulationAddress, DtAttributeRecordSet*> DtRecordSetBySimulationAddressMap;
32 typedef std::map<DtObjectId, DtRecordSetBySimulationAddressMap> DtAttributesByObjectIdMap;
39 {
40 
41 public:
42 
44  DtReflectedObjectList(DtExerciseConn* exConn, int numBucketsPrimeNumber = 503); // 10007 default for hashtable is 127 upped to 503
45 
48  virtual ~DtReflectedObjectList();
49 
51  virtual void initializeAttributePduKindsOfInterest(const std::set<DtPduKind>& pduKinds);
52 
54  virtual DtReflectedObject* firstObj() const;
55  virtual DtReflectedObject* lastObj() const;
56 
58  virtual int count() const;
59 
61  virtual DtReflectedObject* lookupObj(const DtBaseHashKey& key) const;
62 
64  virtual DtExerciseConn* exerciseConn() const;
65 
67  virtual void addObjectAdditionCallback(
68  DtReflectedObjectCallbackFunction cb, void* userData);
69  virtual void removeObjectAdditionCallback(
70  DtReflectedObjectCallbackFunction cb, void* userData);
71 
73  virtual void addObjectRemovalCallback(
74  DtReflectedObjectCallbackFunction cb, void* userData);
75  virtual void removeObjectRemovalCallback(
76  DtReflectedObjectCallbackFunction cb, void* userData);
77 
79  virtual void print() const;
80 
83  virtual void setTimeoutProcessing(bool onOff);
84 
86  virtual void setTimeoutInterval(DtTime time);
87  virtual DtTime timeoutInterval();
88 
91  virtual void setDiscoveryCondition(DtDiscoveryCondition fn, void* usr);
92 
95  virtual void clearDiscoveryCondition();
96 
99  virtual void removeAndDelete(DtReflectedObject* obj, char* msg = NULL);
100 
103  virtual void removeObject(DtReflectedObject* obj);
104 
105  virtual DtTime timeoutCheckInterval() const { return myTimeoutCheckInterval; }
106  virtual void setTimeoutCheckInterval(DtTime interval) { myTimeoutCheckInterval = interval; }
107 
108 private:
109 
112 
114  DtReflectedObjectList& operator=(const DtReflectedObjectList& orig);
115 
116 protected:
117 
119  virtual DtReflectedObject* newReflectedObj(const DtStateMsg& msg) = 0;
120 
122  virtual DtReflectedObject* processStateMessage(const DtStateMsg& msg);
123 
127  virtual void doTimeouts();
128 
133  virtual void objectAdded(DtReflectedObject* object);
134 
137  virtual bool shouldBeTimedOut(DtReflectedObject* object);
138 
142  void emptyLists();
143  void emptyCallbackLists();
144 
146  virtual void processObjectAdditionCallbacks(
147  DtReflectedObject* object);
148  virtual void processObjectRemovalCallbacks(
149  DtReflectedObject* object);
150 
152  virtual const DtBaseHashKey&
153  hashKeyFromStateMessage(const DtStateMsg* msg) = 0;
154 
156  virtual DtBaseHashKey*
157  hashKeyFromAttributeRecordSet(const DtAttributeRecordSet& recordSet);
158 
161  virtual int acceptPdu(const DtStateMsg&) const;
162 
165  virtual bool readyToAdd(DtReflectedObject* obj);
166 
167 protected:
168 
170  static void doTimeoutsPostDrainCb(void* usr);
171 
172  static void processAttributePduCb(DtAttributeInteraction *inter, void *usr);
173  virtual void processAttributePduCb(DtAttributeInteraction *inter);
174  virtual void processAttributePduRecordSet(const DtAttributeRecordSet& recordSet, const DtSimulationAddress& simAddr, DtReflectedObject* obj = 0);
175 
176  static void processAttributePduWaitListCb(DtReflectedObject* obj, void* userData);
177  virtual void processAttributePduWaitListCb(DtReflectedObject* obj);
178  virtual void deleteRecordSetBySimulationAddressMap(DtRecordSetBySimulationAddressMap& recordSetMap, const DtSimulationAddress& simAddr = DtSimulationAddress()) const;
179 
180 protected:
181 
182  DtExerciseConn* myExConn;
183  DtIntrusiveList myObjectAddedCallbacks;
184  DtIntrusiveList myObjectRemovedCallbacks;
185  DtIntrusiveList myObjectList;
186  DtIntrusiveList myWaitList;
187  DtHashlist myObjectHashlist;
188  DtHashlist myWaitHashlist;
189  DtAttributesByObjectIdMap myAttributeWaitHashlist;
190  DtTime myTimeoutInterval;
191  DtTime myNextTimeoutCheck;
192  DtTime myTimeoutCheckInterval;
193  bool myTimeoutProcessingFlag;
194  DtDiscoveryCondition myDiscoveryCondition;
195  void* myDiscoveryConditionParameter;
196  std::set<DtPduKind> myPduKindSet;
197 };
198 
199 #endif
200 

Document ID: Generated on Mon Jun 22 21:18:40 EDT 2020 from SVN revision 213785
Copyright © 2005-2018 MAK Technologies. All Rights Reserved (www.mak.com)