VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
stateDataManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2019 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
9 
13 #include "vrfutil/rwUUID.h"
14 #include <tbb/spin_rw_mutex.h>
15 #include <tbb/concurrent_queue.h>
16 #include <vlutil/vlTime.h>
17 #include "legionDataStore/view.h"
18 #include "legionDataStore/viewManager.h"
19 #include "legionDataStore/simulationDatabase.h"
20 #include "vlpi/entityIdentifier.h"
21 
22 #include <queue>
23 #include <memory>
24 #include <vector>
25 #include <set>
26 #include <boost/unordered_map.hpp>
27 
28 #include <boost/signals2.hpp>
29 #include <boost/function.hpp>
30 
31 class Coordinate_System;
32 
33 namespace Legion
34 {
35  class SimulationDatabase;
36  class EventManager;
37  class ControlManager;
38  struct AttributeDescriptor;
39 }
40 
41 class DtVrfParameterDb;
42 class DtObjectType;
43 
44 namespace makVrf
45 {
46  struct DtEmitterSystemBeamStateData;
47  class DtStateData;
48  class DtEmitterSystemStateComponent;
49  class DtEntityStateComponent;
50  class DtFrameStateInterface;
51  class DtSimulatedObjectStateComponent;
52 
54  {
57  };
58 
59  typedef std::vector<DtTrackJamBeamInfo> DtTrackJamBeamInfoList;
60 
61  class DtStateComponent;
62  class DtFrameDataInterface;
63  class DtStateDataManager;
64 
65  typedef DtStateDataManager* (*DtStateDataManagerCreatorFcn)(Legion::SimulationDatabase*, int);
66 
72  {
73  protected:
75 
76  public:
77  typedef std::set<const DtFrameStateInterface*> CurrentFrameStates;
78  typedef boost::function<bool (DtStateData*)> PreAddCallback;
79 
81  DtStateDataManager(Legion::SimulationDatabase* = 0, int threadPoolSize = -1);
82  virtual ~DtStateDataManager();
83 
86  virtual DtStateData* createStateData(bool isLocal, const DtObjectType&, const DtUUID& uuid = DtUUID(), int publishFlag = 0,
87  PreAddCallback callback = 0, bool remoteObject = false);
88  virtual void setParameterDatabase(DtVrfParameterDb*);
90  {
91  return myParameterDatabase;
92  }
93 
95  {
96  return myJobProcessor;
97  }
98 
100  virtual DtStateData*createStateData(Legion::UInt64 legionHandle, PreAddCallback callback = 0);
101 
103  virtual void removeAndDeleteAll();
104 
105  virtual void removeStateData(DtStateData*);
106  virtual void removeStateData(const DtUUID&);
107  virtual void removeStateDataByStateId(makVrf::SimStateID);
108  virtual void removeStateDataByLegionGlobalId(unsigned long long);
109 
110  virtual void beginFrame(double simTime);
111  virtual void advanceFrame();
112 
114  virtual DtStateData* advanceFrameFor(unsigned long long legionId);
115 
116  virtual void registerLegionComponents(Legion::SimulationDatabase*);
117 
118  Legion::EventManager* eventManager();
119 
120  Legion::SimulationDatabase* database()
121  {
122  return myDatabase;
123  }
124 
125  Legion::SimulationDatabase* unpublishedDatabase()
126  {
127  return myUnpublishedDatabase ? myUnpublishedDatabase : myDatabase;
128  }
129 
132  virtual void reserve(unsigned int);
133 
134  template <typename T_Class>
135  void handleDataUpdated(const std::vector<typename Legion::SetView<T_Class>::InstanceUpdateData>& instanceList)
136  {
137  typename InstancesUpdatedCallbacks::iterator iter = myInstancesUpdatedCallbacks.find(T_Class::type());
138 
139  if (iter != myInstancesUpdatedCallbacks.end())
140  {
141  typename std::vector<typename Legion::SetView<T_Class>::InstanceUpdateData>::const_iterator instIter = instanceList.begin();
142  typename std::vector<typename Legion::SetView<T_Class>::InstanceUpdateData>::const_iterator instEnd = instanceList.end();
143 
144  while (instIter != instEnd)
145  {
146  const T_Class& ent = instIter->instance;
147  InstanceUpdatedCallbacks::iterator callIter = iter->second.find(ent.instanceHandle());
148 
149  if (callIter != iter->second.end())
150  {
151  Callbacks::iterator cbIter = callIter->second.begin();
152  Callbacks::iterator cbEnd = callIter->second.end();
153 
154  while (cbIter != cbEnd)
155  {
156  (cbIter->first)(instIter->attributesChanged);
157  ++cbIter;
158  }
159  }
160 
161  ++instIter;
162  }
163  }
164  }
165 
166  template <typename T_Class>
167  unsigned int addInstanceUpdatedCallback(Legion::SimulationDatabase* database,
168  DtInstanceUpdatedCallback callback, Legion::InstanceHandle instanceHandle,
169  const typename std::vector<Legion::AttributeIndex>& attributeIndexFilter = std::vector<Legion::AttributeIndex>())
170  {
171  if (isValid())
172  {
173  unsigned int newHandle = ++myCallbackHandle;
174  tbb::spin_mutex::scoped_lock lock(myUpdateCallbackMutex);
175 
176  InstancesUpdatedCallbacks::iterator iter = myInstancesUpdatedCallbacks.find(T_Class::type());
177 
178  if (iter == myInstancesUpdatedCallbacks.end())
179  {
180  myInstancesUpdatedCallbacks[T_Class::type()] = InstanceUpdatedCallbacks();
181  iter = myInstancesUpdatedCallbacks.find(T_Class::type());
182  }
183 
184  iter->second[instanceHandle].push_back(std::make_pair(callback, newHandle));
185 
186  if (iter->second.size() == 1)
187  {
188  view<T_Class>(database)->addInstanceUpdatedCallback(typename Legion::SetView<T_Class>::InstanceUpdateCallback(this,
189  &DtStateDataManager::handleDataUpdated<T_Class>), attributeIndexFilter);
190  }
191 
192  return newHandle;
193  }
194 
195  return 0;
196  }
197 
198  template <typename T_Class>
199  void removeInstanceUpdatedCallback(Legion::SimulationDatabase* database, Legion::InstanceHandle instanceHandle, unsigned int callbackHandle)
200  {
201  if (isValid() && callbackHandle)
202  {
203  tbb::spin_mutex::scoped_lock lock(myUpdateCallbackMutex);
204  InstancesUpdatedCallbacks::iterator iter = myInstancesUpdatedCallbacks.find(T_Class::type());
205 
206  if (iter != myInstancesUpdatedCallbacks.end())
207  {
208  InstanceUpdatedCallbacks::iterator callIter = iter->second.find(instanceHandle);
209 
210  if (callIter != iter->second.end())
211  {
212  Callbacks::iterator cbIter = callIter->second.begin();
213  Callbacks::iterator cbEnd = callIter->second.end();
214 
215  while (cbIter != cbEnd)
216  {
217  if (cbIter->second == callbackHandle)
218  {
219  callIter->second.erase(cbIter);
220  break;
221  }
222 
223  ++cbIter;
224  }
225 
226  if (callIter->second.size() == 0)
227  {
228  iter->second.erase(callIter);
229 
230  if (iter->second.size() == 0)
231  {
232  myInstancesUpdatedCallbacks.erase(iter);
233  view<T_Class>(database)->removeInstanceUpdatedCallback(typename Legion::SetView<T_Class>::InstanceUpdateCallback(this,
234  &DtStateDataManager::handleDataUpdated<T_Class>));
235  }
236  }
237  }
238  }
239  }
240  }
241 
242  bool isValid() const
243  {
244  return (myDatabase != 0);
245  }
246 
248  {
249  tbb::spin_rw_mutex::scoped_lock lock(myMutex, false);
250  if (id < myStateData.size())
251  {
252  return myStateData[id];
253  }
254 
255  return 0;
256  }
257 
259  {
260  tbb::spin_rw_mutex::scoped_lock lock(myMutex, false);
261  if ((id != makVrf::InvalidSimStateID) && (id < myStateData.size()) && (myStateData[id] != 0))
262  {
263  return myStateData[id];
264  }
265 
266  return 0;
267  }
268 
269  double absRealTime() const
270  {
271  return myClock.absRealTime();
272  }
273 
275  virtual void prepareForHandoff(unsigned long long, bool becomingLocal);
276 
278  virtual void handoffComplete(makVrf::SimStateID);
279  virtual bool awaitingHandoff(makVrf::SimStateID) const;
280 
282  typedef DtStateData*(*StateDataCreatorFcn)(makVrf::SimStateID, Legion::SimulationDatabase*, DtStateDataManager*);
283 
285  typedef DtStateData*(*RemoteStateDataCreatorFcn)(makVrf::SimStateID, UInt64 legionId, Legion::SimulationDatabase*, DtStateDataManager*);
286 
288  static StateDataCreatorFcn setStateDataCreatorFcn(StateDataCreatorFcn);
289  static StateDataCreatorFcn stateDataCreatorFcn();
290 
291  static RemoteStateDataCreatorFcn setRemoteStateDataCreatorFcn(RemoteStateDataCreatorFcn);
292  static RemoteStateDataCreatorFcn remoteStateDataCreatorFcn();
293 
294  static DtStateData* defaultStateDataCreator(makVrf::SimStateID, Legion::SimulationDatabase*, DtStateDataManager*);
295  static DtStateData* defaultRemoteStateDataCreator(makVrf::SimStateID, UInt64 legionGlobalId, Legion::SimulationDatabase*, DtStateDataManager*);
296 
297  virtual DtStateData* createStateData(makVrf::SimStateID, Legion::SimulationDatabase*);
298  virtual DtStateData* createStateData(makVrf::SimStateID, UInt64 legionGlobalId);
299 
301  virtual void clear();
302 
303  Legion::ControlManager* controlManager();
304 
305  virtual DtUUID uuidFor(makVrf::SimStateID) const;
306 
307  virtual const DtStateData*stateDataFor(const DtUUID&) const;
308  virtual DtStateData*stateDataFor(const DtUUID&);
309 
310  virtual const DtStateData*stateDataFor(const DtEntityIdentifier&) const;
311  virtual DtStateData*stateDataFor(const DtEntityIdentifier&);
312 
314  virtual void setUpdateOnlySpecifiedStateDataMode(bool);
316  {
317  return myUpdateOnlySpecifiedStateDataMode;
318  }
319 
320  virtual const DtStateData* stateDataFor(makVrf::SimStateID) const;
321  virtual DtStateData* stateDataFor(makVrf::SimStateID);
322 
323  virtual const DtStateData* stateDataForLegionId(UInt64) const;
324  virtual DtStateData* stateDataForLegionId(UInt64);
325 
327  virtual void setRunFullyThreaded(bool, int theadCount = 4);
328  bool runFullyThreaded() const
329  {
330  return myRunFullyThreaded;
331  }
332 
333  typedef boost::signals2::signal<void (DtStateComponent*)> StateComponentAddedSignal;
334  typedef boost::signals2::signal<void (DtStateComponent*)> StateComponentRemovedSignal;
335 
336  virtual void addStateComponent(DtStateComponent*);
337  virtual void removeStateComponent(DtStateComponent*, bool deleteOnRemoval = true);
338 
339  virtual void resizeContainer(unsigned);
340 
341  template <typename T_Component>
343  {
344  resizeContainer(T_Component::ComponentType());
345  }
346 
347  template <typename T_Component>
349  {
350  return signalWhenStateComponentAdded(T_Component::ComponentType());
351  }
352 
354  {
355  tbb::spin_rw_mutex::scoped_lock lock(myComponentMutex, true);
356  resizeContainer(type);
357  return *(myCurrentFrameStates[type].signal_stateComponentAdded);
358  }
359 
360  template <typename T_Component>
362  {
363  return signalWhenStateComponentRemoved(T_Component::ComponentType());
364  }
365 
367  {
368  tbb::spin_rw_mutex::scoped_lock lock(myComponentMutex, true);
369  resizeContainer(type);
370  return *(myCurrentFrameStates[type].signal_stateComponentRemoved);
371  }
372 
373  template <typename T_Component>
375  {
376  static CurrentFrameStates theDefaultSc;
377 
378  tbb::spin_rw_mutex::scoped_lock lock(myComponentMutex, false);
379 
380  if (T_Component::ComponentType() < myCurrentFrameStates.size())
381  {
382  return myCurrentFrameStates[T_Component::ComponentType()].currentFrameStates;
383  }
384 
385  return theDefaultSc;
386  }
387 
390  virtual void removeAll();
391 
393  virtual std::set<const DtStateData*> entitiesTracking(const DtUUID&) const;
394 
396  virtual std::set<const DtStateData*> entitiesJamming(const DtUUID&) const;
397 
399  virtual DtTrackJamBeamInfoList systemsTrackingObject(const DtUUID&) const;
400 
402  virtual DtTrackJamBeamInfoList systemsJammingObject(const DtUUID&) const;
403 
407  static void setStateDataManagerCreatorFcn(DtStateDataManagerCreatorFcn fcn);
408  static DtStateDataManager* createStateDataManager(Legion::SimulationDatabase* = 0, int threadPoolSize = -1);
410 
413  virtual void setUnpublishedDatabaseUsage(bool);
414 
416  virtual void setCoordinateSystem(const Coordinate_System*);
418  {
419  return myCoordinateSystem;
420  }
421 
422  typedef std::map<UInt64, DtStateData*> StateDataByLegionId;
424  {
425  return myEntityData;
426  }
427 
429  {
430  return myUnitData;
431  }
432 
434  {
435  return myEnvironmentalData;
436  }
437 
438  virtual void setPublishingOnLegionNetwork(bool b);
440  {
441  return myPublishingOnLegionNetwork;
442  }
443 
445  template <typename T_Class>
446  Legion::SetView<T_Class>* view(Legion::SimulationDatabase* db)
447  {
448  tbb::spin_rw_mutex::scoped_lock lock(myViewCreateMutex, true);
449 
450  DatabaseViews::iterator iter = myDatabaseViews.find(db);
451 
452  if (iter == myDatabaseViews.end())
453  {
454  myDatabaseViews[db] = Views();
455  iter = myDatabaseViews.find(db);
456  }
457 
458  DtString key(T_Class::type());
459  Views::iterator viewIter = iter->second.find(key);
460 
461  if (viewIter == iter->second.end())
462  {
463  iter->second[key] = db->viewManager().createSetView<T_Class>(key, (myUnpublishedDatabase ? Legion::ViewScope::Remote : Legion::ViewScope::All));
464  viewIter = iter->second.find(key);
465  }
466 
467  return (Legion::SetView<T_Class>*)(viewIter->second);
468  }
469 
470  bool advancingFrame() const
471  {
472  return myAdvancingFrame;
473  }
474 
475  protected:
476  virtual std::set<const DtStateData*> entitiesTracking(int beamType, const DtUUID&) const;
477  virtual DtTrackJamBeamInfoList systemsTrackingObject(int beamType, const DtUUID&) const;
478  virtual void uuidChanged(makVrf::SimStateID, const DtUUID& oldUUID, const DtUUID& newUUID);
479  virtual void hostChanged(const DtStateData*, const DtUUID& oldUUID, const DtUUID& newUUID);
480  virtual void subordinatesChanged(const DtStateData*, const std::vector<DtUUID>& oldSubordinates, const std::vector<DtUUID>& newSubordinates);
481  virtual void completeAttachments(DtStateData*);
482  virtual void completeAttachments(const DtUUID&);
483  virtual void completeAttachments();
484  virtual void slot_stateComponentAboutToBeDeleted(DtStateComponent*);
485 
486  virtual void resolveHostChanged(const DtSimulatedObjectStateComponent*, const DtUUID& oldUUID, const DtUUID& newUUID,
487  std::set<DtEntityStateComponent*>&);
488 
489  public:
491  mutable boost::signals2::signal<void (const DtStateData*)> signal_stateDataAboutToBeRemoved;
492  mutable boost::signals2::signal<void (makVrf::SimStateID, UInt64)> signal_stateDataRemoved;
493 
495  boost::signals2::signal<void (Legion::SimulationDatabase*)> signal_addVrfSpecificDataElements;
496 
499  boost::signals2::signal<void (const DtStateData*)> signal_initializeStateDataBeforeAdd;
500  mutable boost::signals2::signal<void (DtStateData*)> signal_stateDataAdded;
501  boost::signals2::signal<void ()> signal_beginFrame;
502  boost::signals2::signal<void ()> signal_preAdvanceFrame;
503  boost::signals2::signal<void ()> signal_advanceFrame;
504  boost::signals2::signal<void (DtStateData*, bool)> signal_prepareForHandoff;
505 
508  boost::signals2::signal<void (DtStateData*)> signal_entityAdded;
509  boost::signals2::signal<void (const DtStateData*)> signal_entityRemoved;
510 
511  boost::signals2::signal<void (DtStateData*)> signal_unitAdded;
512  boost::signals2::signal<void (const DtStateData*)> signal_unitRemoved;
513 
514  boost::signals2::signal<void (DtStateData*)> signal_environmentalAdded;
515  boost::signals2::signal<void (const DtStateData*)> signal_environmentalRemoved;
516  boost::signals2::signal<void (unsigned long long, const DtUUID& oldUUID, const DtUUID& newUUID)> signal_uuidChanged;
517 
518  boost::signals2::signal<void (DtStateComponent*)> signal_stateComponentAdded;
519  boost::signals2::signal<void (DtStateComponent*)> signal_stateComponentRemoved;
520  boost::signals2::signal<void ()> signal_deleted;
521 
522  typedef std::vector<DtStateData*> StateData;
523 
524  protected:
526  virtual void _internalRemoveStateData(DtStateData*sd);
527 
528  virtual void addVrfSpecificDataElements(Legion::SimulationDatabase*);
529 
530  virtual void resolveHostChanges();
531  virtual void removeAllStateComponents();
532  virtual void resolveSubordinateChanges();
533 
534  virtual void removeStateDataToBeDeleted();
535 
537  void initializeDefaultPublicData();
538 
539  virtual void componentDeleted(DtStateComponent* c);
540 
541  protected:
543 
544  mutable tbb::spin_rw_mutex myMutex;
545 
546  Legion::SimulationDatabase* myDatabase;
547  Legion::SimulationDatabase* myUnpublishedDatabase;
548 
549  std::set<unsigned long long> myAwaitingHandoff;
550 
551  tbb::atomic<makVrf::SimStateID> myNextSimStateID;
552  tbb::concurrent_queue<makVrf::SimStateID> myFreeStateIDs;
553 
555 
558 
559  mutable tbb::spin_rw_mutex myComponentMutex;
560 
562  {
564  : signal_stateComponentAdded(new StateComponentAddedSignal)
565  , signal_stateComponentRemoved(new StateComponentRemovedSignal)
566  {};
567 
569  : signal_stateComponentAdded(orig.signal_stateComponentAdded)
570  , signal_stateComponentRemoved(orig.signal_stateComponentRemoved)
571  , currentFrameStates(orig.currentFrameStates)
572  {};
573 
575  {
576  signal_stateComponentAdded = rhs.signal_stateComponentAdded;
577  signal_stateComponentRemoved = rhs.signal_stateComponentRemoved;
578  currentFrameStates = rhs.currentFrameStates;
579 
580  return *this;
581  }
582 
583  std::shared_ptr<StateComponentAddedSignal> signal_stateComponentAdded;
584  std::shared_ptr<StateComponentRemovedSignal> signal_stateComponentRemoved;
586  };
587 
588  typedef std::vector<StateComponent> CurrentFrameStatesList;
590 
591  typedef boost::unordered_map<DtUUID, DtStateData*> StateDataByUUID;
593 
594  typedef std::map<DtEntityIdentifier, DtStateData*> StateDataByEntityIdentifier;
596 
598 
600 
603 
607 
609 
610  unsigned int myReserved;
611 
612  tbb::spin_mutex myUpdateCallbackMutex;
613  tbb::spin_rw_mutex myViewCreateMutex;
614  typedef std::map<DtString, Legion::View*> Views;
615  typedef std::map<Legion::SimulationDatabase*, Views> DatabaseViews;
617 
618  typedef std::vector<std::pair<DtInstanceUpdatedCallback, unsigned int> > Callbacks;
619  typedef std::map<Legion::InstanceHandle, Callbacks> InstanceUpdatedCallbacks;
620  typedef std::map<Legion::AttributeSetId, InstanceUpdatedCallbacks> InstancesUpdatedCallbacks;
622 
623  std::atomic<unsigned int> myCallbackHandle;
624 
626  std::map<unsigned long long, std::map<DtUUID, DtUUID> > myHostsChangedThisFrame;
627  std::map<DtUUID, std::set<DtUUID> > myWaitingForAttachment;
628 
630 
632  typedef std::pair<std::set<DtUUID>, std::set<DtUUID> > SubordinateChangeSet;
633  std::map<DtUUID, SubordinateChangeSet> mySubordinatesChangedThisFrame;
634  std::map<DtUUID, std::set<DtUUID> > myPendingSuperiorSet;
635 
637 
638  std::vector<DtStateData*> myStateDataToBeDeleted;
640 
642  {
644  boost::shared_ptr<boost::signals2::connection> deleteConnection;
645  };
646 
647  std::map<DtStateComponent*, ComponentRemoval> myComponentsToRemove;
648  std::set<DtStateComponent*> myComponentsDeleted;
650 
651  tbb::spin_mutex myAdvancedThisFrameMutex;
652  std::set<unsigned long long> myAdvancedThisFrame;
653  bool myAdvancingFrame = false;
654  };
655 }
boost::signals2::signal< void()> signal_preAdvanceFrame
Definition: stateDataManager.h:502
std::map< DtString, Legion::View * > Views
Definition: stateDataManager.h:614
UUID is a unique ID wrapper class.
Definition: rwUUID.h:226
boost::signals2::signal< void(Legion::SimulationDatabase *)> signal_addVrfSpecificDataElements
Signal sent when it is ok to add columns to the entity set.
Definition: stateDataManager.h:495
unsigned long long SimStateID
Definition: stateDataTypes.h:16
StateComponentAddedSignal & signalWhenStateComponentAdded()
Definition: stateDataManager.h:348
void resizeContainer()
Definition: stateDataManager.h:342
unsigned int addInstanceUpdatedCallback(Legion::SimulationDatabase *database, DtInstanceUpdatedCallback callback, Legion::InstanceHandle instanceHandle, const typename std::vector< Legion::AttributeIndex > &attributeIndexFilter=std::vector< Legion::AttributeIndex >())
Definition: stateDataManager.h:167
std::map< DtEntityIdentifier, DtStateData * > StateDataByEntityIdentifier
Definition: stateDataManager.h:594
tbb::spin_mutex mySubordinatesChangedThisFrameMutex
Definition: stateDataManager.h:629
std::set< DtStateComponent * > myComponentsDeleted
Definition: stateDataManager.h:648
bool deleteOnRemoval
Definition: stateDataManager.h:643
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:38
const StateDataByLegionId & environmentalData() const
Definition: stateDataManager.h:433
bool isValid() const
Definition: stateDataManager.h:242
InstancesUpdatedCallbacks myInstancesUpdatedCallbacks
Definition: stateDataManager.h:621
StateComponentAddedSignal & signalWhenStateComponentRemoved(unsigned type)
Definition: stateDataManager.h:366
tbb::spin_rw_mutex myComponentMutex
Definition: stateDataManager.h:559
unsigned int myReserved
Definition: stateDataManager.h:610
std::vector< DtStateData * > StateData
Definition: stateDataManager.h:522
DtVrfParameterDb * myParameterDatabase
Definition: stateDataManager.h:636
static DtStateDataManagerCreatorFcn theStateDataManagerCreatorFcn
Definition: stateDataManager.h:597
DtStateDataManager *(* DtStateDataManagerCreatorFcn)(Legion::SimulationDatabase *, int)
Definition: stateDataManager.h:65
boost::signals2::signal< void()> signal_deleted
Definition: stateDataManager.h:520
bool myPublishingOnLegionNetwork
Definition: stateDataManager.h:639
The DtSimulatedObjectStateComponent is an interface that all main components (those that are consider...
Definition: simulatedObjectStateComponent.h:21
std::map< Legion::AttributeSetId, InstanceUpdatedCallbacks > InstancesUpdatedCallbacks
Definition: stateDataManager.h:620
StateComponent & operator=(const StateComponent &rhs)
Definition: stateDataManager.h:574
const DtEmitterSystemBeamStateData * beamSR
Definition: stateDataManager.h:55
std::shared_ptr< StateComponentRemovedSignal > signal_stateComponentRemoved
Definition: stateDataManager.h:584
DtClock myClock
Definition: stateDataManager.h:556
std::set< unsigned long long > myAdvancedThisFrame
Definition: stateDataManager.h:652
boost::signals2::signal< void(DtStateComponent *)> StateComponentRemovedSignal
Definition: stateDataManager.h:334
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
tbb::spin_rw_mutex myMutex
Definition: stateDataManager.h:544
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
bool runFullyThreaded() const
Definition: stateDataManager.h:328
tbb::spin_mutex myAdvancedThisFrameMutex
Definition: stateDataManager.h:651
Contains the DtUUID class declaration.
std::shared_ptr< StateComponentAddedSignal > signal_stateComponentAdded
Definition: stateDataManager.h:583
boost::signals2::signal< void(DtStateData *)> signal_unitAdded
Definition: stateDataManager.h:511
boost::signals2::signal< void()> signal_advanceFrame
Definition: stateDataManager.h:503
std::vector< StateComponent > CurrentFrameStatesList
Definition: stateDataManager.h:588
boost::signals2::signal< void()> signal_beginFrame
Definition: stateDataManager.h:501
DtStateData * stateData(makVrf::SimStateID id)
Definition: stateDataManager.h:258
StateDataByLegionId myStateDataByLegionId
Definition: stateDataManager.h:599
StateComponent()
Definition: stateDataManager.h:563
Definition: objectType.h:27
double absRealTime() const
Definition: stateDataManager.h:269
CurrentFrameStates currentFrameStates
Definition: stateDataManager.h:585
Legion::SimulationDatabase * database()
Definition: stateDataManager.h:120
Legion::SetView< T_Class > * view(Legion::SimulationDatabase *db)
Returns the entity view for the given database.
Definition: stateDataManager.h:446
std::atomic< unsigned int > myCallbackHandle
Definition: stateDataManager.h:623
std::vector< DtTrackJamBeamInfo > DtTrackJamBeamInfoList
Definition: stateDataManager.h:59
std::pair< std::set< DtUUID >, std::set< DtUUID > > SubordinateChangeSet
First is added, second removed.
Definition: stateDataManager.h:632
StateDataByEntityIdentifier myStateDataByEntityIdentifier
Definition: stateDataManager.h:595
bool publishingOnLegionNetwork() const
Definition: stateDataManager.h:439
const Coordinate_System * myCoordinateSystem
Definition: stateDataManager.h:601
Definition: coordSystem.h:54
const CurrentFrameStates & stateComponents() const
Definition: stateDataManager.h:374
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:336
boost::signals2::signal< void(const DtStateData *)> signal_stateDataAboutToBeRemoved
Signals sent for state data actions.
Definition: stateDataManager.h:491
tbb::spin_rw_mutex myViewCreateMutex
Definition: stateDataManager.h:613
Definition: stateDataManager.h:641
std::map< DtUUID, std::set< DtUUID > > myWaitingForAttachment
Definition: stateDataManager.h:627
Legion::SimulationDatabase * myUnpublishedDatabase
Definition: stateDataManager.h:547
tbb::atomic< makVrf::SimStateID > myNextSimStateID
Definition: stateDataManager.h:551
StateComponent(const StateComponent &orig)
Definition: stateDataManager.h:568
boost::signals2::signal< void(DtStateComponent *)> StateComponentAddedSignal
Definition: stateDataManager.h:333
const DtStateData * stateData(makVrf::SimStateID id) const
Definition: stateDataManager.h:247
std::set< unsigned long long > myAwaitingHandoff
Definition: stateDataManager.h:549
Definition: stateDataManager.h:53
boost::signals2::signal< void(DtStateData *)> signal_stateDataAdded
Definition: stateDataManager.h:500
StateDataByLegionId myUnitData
Definition: stateDataManager.h:605
unsigned long long UInt64
Definition: stateDataTypes.h:17
void removeInstanceUpdatedCallback(Legion::SimulationDatabase *database, Legion::InstanceHandle instanceHandle, unsigned int callbackHandle)
Definition: stateDataManager.h:199
bool myOwnsDatabase
Definition: stateDataManager.h:608
void handleDataUpdated(const std::vector< typename Legion::SetView< T_Class >::InstanceUpdateData > &instanceList)
Definition: stateDataManager.h:135
boost::signals2::signal< void(DtStateData *)> signal_entityAdded
Convenience signals for when a data is added – something is considered a unit if it has a aggregateSt...
Definition: stateDataManager.h:508
bool updateOnlySpecifiedStateDataMode() const
Definition: stateDataManager.h:315
bool advancingFrame() const
Definition: stateDataManager.h:470
tbb::spin_mutex myHostsChangedThisFrameMutex
Definition: stateDataManager.h:625
const DtEmitterSystemStateComponent * emitterSystemSR
Definition: stateDataManager.h:56
boost::signals2::signal< void(unsigned long long, const DtUUID &oldUUID, const DtUUID &newUUID)> signal_uuidChanged
Definition: stateDataManager.h:516
Legion::SimulationDatabase * unpublishedDatabase()
Definition: stateDataManager.h:125
1) Define the interface class that will be used to represent the next and curent frames. The UNDEFINED_ macros are convenience macros that will define methods that throw exceptions (until they are implemented)
Definition: emitterSystemStateComponent.h:446
DtVrfCallbackQueue & jobProcessor()
Definition: stateDataManager.h:94
tbb::concurrent_queue< makVrf::SimStateID > myFreeStateIDs
Definition: stateDataManager.h:552
std::map< UInt64, DtStateData * > StateDataByLegionId
Definition: stateDataManager.h:422
Definition: stateComponent.h:51
StateComponentAddedSignal & signalWhenStateComponentRemoved()
Definition: stateDataManager.h:361
bool myUpdateOnlySpecifiedStateDataMode
Definition: stateDataManager.h:649
StateData myStateData
Definition: stateDataManager.h:542
boost::signals2::signal< void(const DtStateData *)> signal_environmentalRemoved
Definition: stateDataManager.h:515
const Coordinate_System * coordinateSystem() const
Definition: stateDataManager.h:417
StateComponentAddedSignal & signalWhenStateComponentAdded(unsigned type)
Definition: stateDataManager.h:353
StateDataByUUID myStateDataByUUID
Definition: stateDataManager.h:592
CurrentFrameStatesList myCurrentFrameStates
Definition: stateDataManager.h:589
const StateDataByLegionId & unitData() const
Definition: stateDataManager.h:428
DtVrfParameterDb * parameterDatabase() const
Definition: stateDataManager.h:89
boost::signals2::signal< void(const DtStateData *)> signal_unitRemoved
Definition: stateDataManager.h:512
boost::signals2::signal< void(const DtStateData *)> signal_initializeStateDataBeforeAdd
This signal is called before the data is fully added. Gives connectors a chace to add data into the n...
Definition: stateDataManager.h:499
static const SimStateID InvalidSimStateID
Definition: stateDataTypes.h:37
boost::signals2::signal< void(DtStateData *)> signal_environmentalAdded
Definition: stateDataManager.h:514
#define DT_DLL_vrfStateData
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfStateDataDefines.h:26
bool myRunFullyThreaded
Definition: stateDataManager.h:554
StateDataByLegionId myEnvironmentalData
Definition: stateDataManager.h:606
boost::unordered_map< DtUUID, DtStateData * > StateDataByUUID
Definition: stateDataManager.h:591
boost::signals2::signal< void(makVrf::SimStateID, UInt64)> signal_stateDataRemoved
Definition: stateDataManager.h:492
boost::function< bool(DtStateData *)> PreAddCallback
Definition: stateDataManager.h:78
DatabaseViews myDatabaseViews
Definition: stateDataManager.h:616
std::map< DtStateComponent *, ComponentRemoval > myComponentsToRemove
Definition: stateDataManager.h:647
StateDataByLegionId myEntityData
Definition: stateDataManager.h:604
boost::signals2::signal< void(DtStateComponent *)> signal_stateComponentRemoved
Definition: stateDataManager.h:519
std::map< Legion::InstanceHandle, Callbacks > InstanceUpdatedCallbacks
Definition: stateDataManager.h:619
std::map< Legion::SimulationDatabase *, Views > DatabaseViews
Definition: stateDataManager.h:615
boost::signals2::signal< void(DtStateData *, bool)> signal_prepareForHandoff
Definition: stateDataManager.h:504
std::map< DtUUID, SubordinateChangeSet > mySubordinatesChangedThisFrame
Definition: stateDataManager.h:633
boost::function< void(const std::vector< UInt32 > &)> DtInstanceUpdatedCallback
Definition: stateDataTypes.h:21
boost::shared_ptr< boost::signals2::connection > deleteConnection
Definition: stateDataManager.h:644
std::map< DtUUID, std::set< DtUUID > > myPendingSuperiorSet
Definition: stateDataManager.h:634
The DtEmitterSystemStateComponentList is a collection of emitter systems and the beams they represent...
Definition: emitterSystemStateComponent.h:24
Definition: stateDataManager.h:561
boost::signals2::signal< void(DtStateComponent *)> signal_stateComponentAdded
Definition: stateDataManager.h:518
tbb::spin_mutex myUpdateCallbackMutex
Definition: stateDataManager.h:612
const StateDataByLegionId & entityData() const
Definition: stateDataManager.h:423
Legion::SimulationDatabase * myDatabase
Definition: stateDataManager.h:546
DtVrfCallbackQueue myJobProcessor
Definition: stateDataManager.h:557
std::vector< std::pair< DtInstanceUpdatedCallback, unsigned int > > Callbacks
Definition: stateDataManager.h:618
std::vector< DtStateData * > myStateDataToBeDeleted
Definition: stateDataManager.h:638
bool myOwnsCoordinateSystem
Definition: stateDataManager.h:602
std::map< unsigned long long, std::map< DtUUID, DtUUID > > myHostsChangedThisFrame
Definition: stateDataManager.h:626
std::set< const DtFrameStateInterface * > CurrentFrameStates
Definition: stateDataManager.h:74
boost::signals2::signal< void(const DtStateData *)> signal_entityRemoved
Definition: stateDataManager.h:509
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:71

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)