VR-Link API Documentation for DIS
 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 MAK Technologies, Inc
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 
23 class DT_DLL_VL DtHlaObject;
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 
114  virtual void addWaitlistAdditionCallback(
115  DtReflectedObjectCallbackFunction cb, void* userData);
116  virtual void removeWaitlistAdditionCallback(
117  DtReflectedObjectCallbackFunction cb, void* userData);
118 
123  virtual void addWaitlistRemovalCallback(
124  DtReflectedObjectCallbackFunction cb, void* userData);
125  virtual void removeWaitlistRemovalCallback(
126  DtReflectedObjectCallbackFunction cb, void* userData);
127 
128 private:
129 
132 
134  DtReflectedObjectList& operator=(const DtReflectedObjectList& orig);
135 
136 protected:
137 
139  virtual DtReflectedObject* newReflectedObj(const DtStateMsg& msg) = 0;
140 
142  virtual DtReflectedObject* processStateMessage(const DtStateMsg& msg);
143 
147  virtual void doTimeouts();
148 
153  virtual void objectAdded(DtReflectedObject* object);
154 
157  virtual bool shouldBeTimedOut(DtReflectedObject* object);
158 
162  void emptyLists();
163  void emptyCallbackLists();
164 
166  virtual void processObjectAdditionCallbacks(
167  DtReflectedObject* object);
168  virtual void processObjectRemovalCallbacks(
169  DtReflectedObject* object);
170 
172  virtual void processWaitlistAdditionCallbacks(
173  DtReflectedObject* object);
174  virtual void processWaitlistRemovalCallbacks(
175  DtReflectedObject* object);
176 
178  virtual const DtBaseHashKey&
179  hashKeyFromStateMessage(const DtStateMsg* msg) = 0;
180 
182  virtual DtBaseHashKey*
183  hashKeyFromAttributeRecordSet(const DtAttributeRecordSet& recordSet);
184 
187  virtual int acceptPdu(const DtStateMsg&) const;
188 
191  virtual bool readyToAdd(DtReflectedObject* obj);
192 
193 protected:
194 
196  static void doTimeoutsPostDrainCb(void* usr);
197 
198  static void processAttributePduCb(DtAttributeInteraction *inter, void *usr);
199  virtual void processAttributePduCb(DtAttributeInteraction *inter);
200  virtual void processAttributePduRecordSet(const DtAttributeRecordSet& recordSet, const DtSimulationAddress& simAddr, DtReflectedObject* obj = 0);
201 
202  static void processAttributePduWaitListCb(DtReflectedObject* obj, void* userData);
203  virtual void processAttributePduWaitListCb(DtReflectedObject* obj);
204  virtual void deleteRecordSetBySimulationAddressMap(DtRecordSetBySimulationAddressMap& recordSetMap, const DtSimulationAddress& simAddr = DtSimulationAddress()) const;
205 
206 protected:
207 
224  std::set<DtPduKind> myPduKindSet;
225 };
226 
227 #endif
228 
Instances of DtEntityIdentifierHashKey are hash keys made from DtEntityIdentifiers.
Definition: entityIdentifierHashKey.h:21
Instances of DtReflectedObjectList are lists of instances of classes derived from DtReflectedObject...
Definition: reflectedObjectListDIS.h:38
bool(* DtDiscoveryCondition)(DtReflectedObject *refObj, void *usr)
Definition: reflectedObjectListDIS.h:30
A DtSimulationAddress is used in DIS to identify a particular simulator.
Definition: simulationAddress.h:29
Instances of DtExerciseConn are used to provide an application&#39;s interface or connection to the netwo...
Definition: exerciseConnDIS.h:62
DtIntrusiveList myWaitlistAddedCallbacks
Definition: reflectedObjectListDIS.h:211
std::map< DtSimulationAddress, DtAttributeRecordSet * > DtRecordSetBySimulationAddressMap
Definition: reflectedObjectListDIS.h:31
#define DT_DLL_VL
Definition: vlMachineTypes.h:108
DtIntrusiveList myWaitList
Definition: reflectedObjectListDIS.h:214
DtHashlist myObjectHashlist
Definition: reflectedObjectListDIS.h:215
DtBaseHashKey is an abstract base class for hash keys.
Definition: vlHashKeys.h:39
std::map< DtObjectId, DtRecordSetBySimulationAddressMap > DtAttributesByObjectIdMap
Definition: reflectedObjectListDIS.h:32
This file contains the declaration of DtClock and DtTime.
DtTime myTimeoutInterval
Definition: reflectedObjectListDIS.h:218
DtIntrusiveList myObjectRemovedCallbacks
Definition: reflectedObjectListDIS.h:210
DtTime myNextTimeoutCheck
Definition: reflectedObjectListDIS.h:219
Instances of DtAttributePdu are used to represent the arbitrary attributes added to PDUs...
Definition: attributePdu.h:26
virtual DtTime timeoutCheckInterval() const
Definition: reflectedObjectListDIS.h:105
An intrusive list is a list that assumes that the elements that you add are pointers to instances of ...
Definition: vlList.h:196
Defines DtHashlist and several helper functions.
virtual void setTimeoutCheckInterval(DtTime interval)
Definition: reflectedObjectListDIS.h:106
DtAttributesByObjectIdMap myAttributeWaitHashlist
Definition: reflectedObjectListDIS.h:217
Instances of DtReflectedObject are used to represent a simulation entity reflected across a network (...
Definition: reflectedObjectDIS.h:34
void * myDiscoveryConditionParameter
Definition: reflectedObjectListDIS.h:223
DtDiscoveryCondition myDiscoveryCondition
Definition: reflectedObjectListDIS.h:222
DtHashlist myWaitHashlist
Definition: reflectedObjectListDIS.h:216
DtIntrusiveList myWaitlistRemovedCallbacks
Definition: reflectedObjectListDIS.h:212
Definition: attributeRecordSet.h:11
DtTime myTimeoutCheckInterval
Definition: reflectedObjectListDIS.h:220
DtHashlist is deprecated and provided for backwards compatibility only.
Definition: vlHashlist.h:69
DtIntrusiveList myObjectAddedCallbacks
Definition: reflectedObjectListDIS.h:209
class DT_DLL_VLPROTIND DtSimulationAddress
Definition: netStructs.h:24
void(* DtReflectedObjectCallbackFunction)(DtReflectedObject *obj, void *userData)
Callback function that takes a DtReflectedObject and user data.
Definition: reflectedObjectCallbackInfo.h:19
std::set< DtPduKind > myPduKindSet
Definition: reflectedObjectListDIS.h:224
DtIntrusiveList myObjectList
Definition: reflectedObjectListDIS.h:213
Instances of DtStateMsg are used to represent state data communicated via the network in a DIS (as op...
Definition: stateMsgDIS.h:21
This file contains typedefs for machine dependant types.
This file declares DtAttributePdu and DtAttributeInteraction (DIS ONLY)
bool myTimeoutProcessingFlag
Definition: reflectedObjectListDIS.h:221
DtExerciseConn * myExConn
Definition: reflectedObjectListDIS.h:208

Document ID: Generated on Thu Sep 19 02:12:35 EDT 2024 from SVN revision 269601
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)