VR-Forces 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 #include <tbb/tbb_thread.h>
22 #include <tbb/atomic.h>
23 
24 #include <queue>
25 #include <memory>
26 #include <vector>
27 #include <set>
28 #include <unordered_map>
29 
30 #include <boost/signals2.hpp>
31 #include <boost/function.hpp>
32 
33 class Coordinate_System;
34 
35 namespace Legion
36 {
37  class SimulationDatabase;
38  class EventManager;
39  class ControlManager;
40  struct AttributeDescriptor;
41 }
42 
43 class DtVrfParameterDb;
44 class DtObjectType;
45 
46 namespace makVrf
47 {
48  struct DtEmitterSystemBeamStateData;
49  class DtStateData;
50  class DtEmitterSystemStateComponent;
51  class DtEntityStateComponent;
52  class DtFrameStateInterface;
53  class DtSimulatedObjectStateComponent;
54 
56  {
59  };
60 
61  typedef std::vector<DtTrackJamBeamInfo> DtTrackJamBeamInfoList;
62 
63  class DtStateComponent;
64  class DtFrameDataInterface;
65  class DtStateDataManager;
66 
67  typedef DtStateDataManager* (*DtStateDataManagerCreatorFcn)(Legion::SimulationDatabase*, int);
68 
74  {
75  protected:
76  struct StateComponent;
77 
78  public:
79 
80  enum class FrameStatus
81  {
82  Normal = 0,
83  SkippedBeginFrame,
84  SkipAdvanceFrame
85  };
86 
87  typedef std::set<const DtFrameStateInterface*> CurrentFrameStates;
88  typedef boost::function<bool (DtStateData*)> PreAddCallback;
89 
91  DtStateDataManager(Legion::SimulationDatabase* = 0, int threadPoolSize = -1);
92  virtual ~DtStateDataManager();
93 
96  virtual DtStateData* createStateData(bool isLocal, const DtObjectType&, const DtUUID& uuid = DtUUID(), int publishFlag = 0,
97  PreAddCallback callback = 0, const DtEntityIdentifier& entId = DtEntityIdentifier::nullId());
98  virtual void setParameterDatabase(DtVrfParameterDb*);
100  {
101  return myParameterDatabase;
102  }
103 
105  {
106  return myJobProcessor;
107  }
108 
110  virtual DtStateData*createStateData(Legion::UInt64 legionHandle, PreAddCallback callback = 0);
111 
113  virtual void removeAndDeleteAll();
114 
115  virtual void removeStateData(DtStateData*);
116  virtual void removeStateData(const DtUUID&);
117  virtual void removeStateDataByStateId(makVrf::SimStateID);
118  virtual void removeStateDataByLegionGlobalId(unsigned long long);
119 
120  virtual void beginFrame(double simTime);
121  virtual void advanceFrame();
122 
124  virtual DtStateData* advanceFrameFor(unsigned long long legionId);
125 
126  virtual void registerLegionComponents(Legion::SimulationDatabase*);
127 
128  Legion::EventManager* eventManager();
129 
130  Legion::SimulationDatabase* database()
131  {
132  return myDatabase;
133  }
134 
135  Legion::SimulationDatabase* unpublishedDatabase()
136  {
137  return myUnpublishedDatabase ? myUnpublishedDatabase : myDatabase;
138  }
139 
143  virtual void setBlockOnAdvanceFrameJobs(bool);
145  {
146  return myBlockOnAdvanceFrameJobs;
147  }
148 
150  virtual bool hasOutstandingAdvanceFrameJobs() const;
151 
154  virtual void reserve(unsigned int);
155 
156  template <typename T_Class>
157  void handleDataUpdated(const std::vector<typename Legion::SetView<T_Class>::InstanceUpdateData>& instanceList)
158  {
159  typename InstancesUpdatedCallbacks::iterator iter = myInstancesUpdatedCallbacks.find(T_Class::type());
160 
161  if (iter != myInstancesUpdatedCallbacks.end())
162  {
163  typename std::vector<typename Legion::SetView<T_Class>::InstanceUpdateData>::const_iterator instIter = instanceList.begin();
164  typename std::vector<typename Legion::SetView<T_Class>::InstanceUpdateData>::const_iterator instEnd = instanceList.end();
165 
166  while (instIter != instEnd)
167  {
168  const T_Class& ent = instIter->instance;
169  InstanceUpdatedCallbacks::iterator callIter = iter->second.find(ent.instanceHandle());
170 
171  if (callIter != iter->second.end())
172  {
173  Callbacks::iterator cbIter = callIter->second.begin();
174  Callbacks::iterator cbEnd = callIter->second.end();
175 
176  while (cbIter != cbEnd)
177  {
178  (cbIter->first)(instIter->attributesChanged);
179  ++cbIter;
180  }
181  }
182 
183  ++instIter;
184  }
185  }
186  }
187 
188  template <typename T_Class>
189  unsigned int addInstanceUpdatedCallback(Legion::SimulationDatabase* database,
190  DtInstanceUpdatedCallback callback, Legion::InstanceHandle instanceHandle,
191  const typename std::vector<Legion::AttributeIndex>& attributeIndexFilter = std::vector<Legion::AttributeIndex>())
192  {
193  if (isValid())
194  {
195  unsigned int newHandle = ++myCallbackHandle;
196  tbb::spin_mutex::scoped_lock lock(myUpdateCallbackMutex);
197 
198  InstancesUpdatedCallbacks::iterator iter = myInstancesUpdatedCallbacks.find(T_Class::type());
199 
200  if (iter == myInstancesUpdatedCallbacks.end())
201  {
202  myInstancesUpdatedCallbacks[T_Class::type()] = InstanceUpdatedCallbacks();
203  iter = myInstancesUpdatedCallbacks.find(T_Class::type());
204  }
205 
206  iter->second[instanceHandle].push_back(std::make_pair(callback, newHandle));
207 
208  if (iter->second.size() == 1)
209  {
210  view<T_Class>(database)->addInstanceUpdatedCallback(typename Legion::SetView<T_Class>::InstanceUpdateCallback(this,
211  &DtStateDataManager::handleDataUpdated<T_Class>), attributeIndexFilter);
212  }
213 
214  return newHandle;
215  }
216 
217  return 0;
218  }
219 
220  template <typename T_Class>
221  void removeInstanceUpdatedCallback(Legion::SimulationDatabase* database, Legion::InstanceHandle instanceHandle, unsigned int callbackHandle)
222  {
223  if (isValid() && callbackHandle)
224  {
225  tbb::spin_mutex::scoped_lock lock(myUpdateCallbackMutex);
226  InstancesUpdatedCallbacks::iterator iter = myInstancesUpdatedCallbacks.find(T_Class::type());
227 
228  if (iter != myInstancesUpdatedCallbacks.end())
229  {
230  InstanceUpdatedCallbacks::iterator callIter = iter->second.find(instanceHandle);
231 
232  if (callIter != iter->second.end())
233  {
234  Callbacks::iterator cbIter = callIter->second.begin();
235  Callbacks::iterator cbEnd = callIter->second.end();
236 
237  while (cbIter != cbEnd)
238  {
239  if (cbIter->second == callbackHandle)
240  {
241  callIter->second.erase(cbIter);
242  break;
243  }
244 
245  ++cbIter;
246  }
247 
248  if (callIter->second.size() == 0)
249  {
250  iter->second.erase(callIter);
251 
252  if (iter->second.size() == 0)
253  {
254  myInstancesUpdatedCallbacks.erase(iter);
255  view<T_Class>(database)->removeInstanceUpdatedCallback(typename Legion::SetView<T_Class>::InstanceUpdateCallback(this,
256  &DtStateDataManager::handleDataUpdated<T_Class>));
257  }
258  }
259  }
260  }
261  }
262  }
263 
264  bool isValid() const
265  {
266  return (myDatabase != 0);
267  }
268 
270  {
271  tbb::spin_rw_mutex::scoped_lock lock(myMutex, false);
272  if (id < myStateData.size())
273  {
274  return myStateData[id];
275  }
276 
277  return 0;
278  }
279 
281  {
282  tbb::spin_rw_mutex::scoped_lock lock(myMutex, false);
283  if ((id != makVrf::InvalidSimStateID) && (id < myStateData.size()) && (myStateData[id] != 0))
284  {
285  return myStateData[id];
286  }
287 
288  return 0;
289  }
290 
291  double absRealTime() const
292  {
293  return myClock.absRealTime();
294  }
295 
297  virtual void prepareForHandoff(unsigned long long, bool becomingLocal);
298 
300  virtual void handoffComplete(makVrf::SimStateID);
301  virtual bool awaitingHandoff(makVrf::SimStateID) const;
302 
304  typedef DtStateData*(*StateDataCreatorFcn)(makVrf::SimStateID, Legion::SimulationDatabase*, DtStateDataManager*);
305 
307  typedef DtStateData*(*RemoteStateDataCreatorFcn)(makVrf::SimStateID, UInt64 legionId, Legion::SimulationDatabase*, DtStateDataManager*);
308 
310  static StateDataCreatorFcn setStateDataCreatorFcn(StateDataCreatorFcn);
311  static StateDataCreatorFcn stateDataCreatorFcn();
312 
313  static RemoteStateDataCreatorFcn setRemoteStateDataCreatorFcn(RemoteStateDataCreatorFcn);
314  static RemoteStateDataCreatorFcn remoteStateDataCreatorFcn();
315 
316  static DtStateData* defaultStateDataCreator(makVrf::SimStateID, Legion::SimulationDatabase*, DtStateDataManager*);
317  static DtStateData* defaultRemoteStateDataCreator(makVrf::SimStateID, UInt64 legionGlobalId, Legion::SimulationDatabase*, DtStateDataManager*);
318 
319  virtual DtStateData* createStateData(makVrf::SimStateID, Legion::SimulationDatabase*);
320  virtual DtStateData* createStateData(makVrf::SimStateID, UInt64 legionGlobalId);
321 
323  virtual void clear();
324 
325  Legion::ControlManager* controlManager();
326 
327  virtual DtUUID uuidFor(makVrf::SimStateID) const;
328 
329  virtual const DtStateData*stateDataFor(const DtUUID&) const;
330  virtual DtStateData*stateDataFor(const DtUUID&);
331 
332  virtual const DtStateData*stateDataFor(const DtEntityIdentifier&) const;
333  virtual DtStateData*stateDataFor(const DtEntityIdentifier&);
334 
336  virtual void setUpdateOnlySpecifiedStateDataMode(bool);
338  {
339  return myUpdateOnlySpecifiedStateDataMode;
340  }
341 
343  {
344  return myFrameStatus;
345  }
346 
347  virtual const DtStateData* stateDataFor(makVrf::SimStateID) const;
348  virtual DtStateData* stateDataFor(makVrf::SimStateID);
349 
350  virtual const DtStateData* stateDataForLegionId(UInt64) const;
351  virtual DtStateData* stateDataForLegionId(UInt64);
352 
354  virtual void setRunFullyThreaded(bool, int theadCount = 4);
355  bool runFullyThreaded() const
356  {
357  return myRunFullyThreaded;
358  }
359 
360  typedef boost::signals2::signal<void (DtStateComponent*)> StateComponentAddedSignal;
361  typedef boost::signals2::signal<void (DtStateComponent*)> StateComponentRemovedSignal;
362 
363  virtual void addStateComponent(DtStateComponent*);
364  virtual void removeStateComponent(DtStateComponent*, bool deleteOnRemoval = true);
365 
366  virtual void resizeContainer(unsigned);
367 
368  template <typename T_Component>
370  {
371  resizeContainer(T_Component::ComponentType());
372  }
373 
374  template <typename T_Component>
376  {
377  return signalWhenStateComponentAdded(T_Component::ComponentType());
378  }
379 
381  {
382  tbb::spin_rw_mutex::scoped_lock lock(myComponentMutex, true);
383  resizeContainer(type);
384  return *(myCurrentFrameStates[type].signal_stateComponentAdded);
385  }
386 
387  template <typename T_Component>
389  {
390  return signalWhenStateComponentRemoved(T_Component::ComponentType());
391  }
392 
394  {
395  tbb::spin_rw_mutex::scoped_lock lock(myComponentMutex, true);
396  resizeContainer(type);
397  return *(myCurrentFrameStates[type].signal_stateComponentRemoved);
398  }
399 
400  template <typename T_Component>
402  {
403  static CurrentFrameStates theDefaultSc;
404 
405  tbb::spin_rw_mutex::scoped_lock lock(myComponentMutex, false);
406 
407  if (T_Component::ComponentType() < myCurrentFrameStates.size())
408  {
409  return myCurrentFrameStates[T_Component::ComponentType()].currentFrameStates;
410  }
411 
412  return theDefaultSc;
413  }
414 
417  virtual void removeAll();
418 
420  virtual std::set<const DtStateData*> entitiesTracking(const DtUUID&) const;
421 
423  virtual std::set<const DtStateData*> entitiesJamming(const DtUUID&) const;
424 
426  virtual DtTrackJamBeamInfoList systemsTrackingObject(const DtUUID&) const;
427 
429  virtual DtTrackJamBeamInfoList systemsJammingObject(const DtUUID&) const;
430 
434  static void setStateDataManagerCreatorFcn(DtStateDataManagerCreatorFcn fcn);
435  static DtStateDataManager* createStateDataManager(Legion::SimulationDatabase* = 0, int threadPoolSize = -1);
437 
440  virtual void setUnpublishedDatabaseUsage(bool);
441 
443  virtual void setCoordinateSystem(const Coordinate_System*);
445  {
446  return myCoordinateSystem;
447  }
448 
449  typedef std::unordered_map<UInt64, DtStateData*> StateDataByLegionId;
451  {
452  return myEntityData;
453  }
454 
456  {
457  return myUnitData;
458  }
459 
461  {
462  return myAerodromeData;
463  }
464 
466  {
467  return myEnvironmentalData;
468  }
469 
470  virtual void setPublishingOnLegionNetwork(bool b);
472  {
473  return myPublishingOnLegionNetwork;
474  }
475 
477  template <typename T_Class>
478  Legion::SetView<T_Class>* view(Legion::SimulationDatabase* db)
479  {
480  tbb::spin_rw_mutex::scoped_lock lock(myViewCreateMutex, true);
481 
482  DatabaseViews::iterator iter = myDatabaseViews.find(db);
483 
484  if (iter == myDatabaseViews.end())
485  {
486  myDatabaseViews[db] = Views();
487  iter = myDatabaseViews.find(db);
488  }
489 
490  DtString key(T_Class::type());
491  Views::iterator viewIter = iter->second.find(key);
492 
493  if (viewIter == iter->second.end())
494  {
495  iter->second[key] = db->viewManager().createSetView<T_Class>(key, (myUnpublishedDatabase ? Legion::ViewScope::Remote : Legion::ViewScope::All));
496  viewIter = iter->second.find(key);
497  }
498 
499  return (Legion::SetView<T_Class>*)(viewIter->second);
500  }
501 
502  bool advancingFrame() const
503  {
504  return myAdvancingFrame;
505  }
506 
507  protected:
508  virtual void jobsThread();
509  virtual std::set<const DtStateData*> entitiesTracking(int beamType, const DtUUID&) const;
510  virtual DtTrackJamBeamInfoList systemsTrackingObject(int beamType, const DtUUID&) const;
511  virtual void uuidChanged(makVrf::SimStateID, const DtUUID& oldUUID, const DtUUID& newUUID);
512  virtual void hostChanged(const DtStateData*, const DtUUID& oldUUID, const DtUUID& newUUID);
513  virtual void subordinatesChanged(const DtStateData*, const std::vector<DtUUID>& oldSubordinates, const std::vector<DtUUID>& newSubordinates);
514  virtual void completeAttachments(DtStateData*);
515  virtual void completeAttachments(const DtUUID&);
516  virtual void completeAttachments();
517  virtual void slot_stateComponentAboutToBeDeleted(DtStateComponent*);
518  virtual void convertedToLocal(DtStateData*);
519 
520  virtual void resolveHostChanged(const DtUUID&, const DtUUID& oldUUID, const DtUUID& newUUID,
521  std::set<DtEntityStateComponent*>&);
522 
523  public:
525  mutable boost::signals2::signal<void (const DtStateData*)> signal_stateDataAboutToBeRemoved;
526  mutable boost::signals2::signal<void (makVrf::SimStateID, UInt64)> signal_stateDataRemoved;
527 
529  boost::signals2::signal<void (Legion::SimulationDatabase*)> signal_addVrfSpecificDataElements;
530 
533  boost::signals2::signal<void (const DtStateData*)> signal_initializeStateDataBeforeAdd;
534  mutable boost::signals2::signal<void (DtStateData*)> signal_stateDataAdded;
535  boost::signals2::signal<void ()> signal_beginFrame;
536  boost::signals2::signal<void ()> signal_preAdvanceFrame;
537  boost::signals2::signal<void ()> signal_advanceFrame;
538  boost::signals2::signal<void (DtStateData*, bool)> signal_prepareForHandoff;
539 
542  boost::signals2::signal<void (DtStateData*)> signal_entityAdded;
543  boost::signals2::signal<void (const DtStateData*)> signal_entityRemoved;
544 
545  boost::signals2::signal<void (DtStateData*)> signal_unitAdded;
546  boost::signals2::signal<void (const DtStateData*)> signal_unitRemoved;
547 
548  boost::signals2::signal<void (DtStateData*)> signal_environmentalAdded;
549  boost::signals2::signal<void (const DtStateData*)> signal_environmentalRemoved;
550 
551  boost::signals2::signal<void (DtStateData*)> signal_aerodromeAdded;
552  boost::signals2::signal<void (const DtStateData*)> signal_aerodromeRemoved;
553 
554  boost::signals2::signal<void (unsigned long long, const DtUUID& oldUUID, const DtUUID& newUUID)> signal_uuidChanged;
555 
556  boost::signals2::signal<void (DtStateComponent*)> signal_stateComponentAdded;
557  boost::signals2::signal<void (DtStateComponent*)> signal_stateComponentRemoved;
558  boost::signals2::signal<void ()> signal_deleted;
559 
560  boost::signals2::signal<void (DtStateData*)> signal_convertedToLocal;
561 
562  typedef std::vector<DtStateData*> StateData;
563 
564  protected:
566  virtual void _internalRemoveStateData(DtStateData*sd);
567 
568  virtual void addVrfSpecificDataElements(Legion::SimulationDatabase*);
569 
570  virtual void resolveHostChanges();
571  virtual void removeAllStateComponents();
572  virtual void resolveSubordinateChanges();
573 
574  virtual void removeStateDataToBeDeleted();
575 
577  void initializeDefaultPublicData();
578 
579  virtual void componentDeleted(DtStateComponent* c);
580 
581  protected:
583 
584  mutable tbb::spin_rw_mutex myMutex;
585 
586  Legion::SimulationDatabase* myDatabase;
587  Legion::SimulationDatabase* myUnpublishedDatabase;
588 
589  std::set<unsigned long long> myAwaitingHandoff;
590 
591  tbb::atomic<makVrf::SimStateID> myNextSimStateID;
592  tbb::concurrent_queue<makVrf::SimStateID> myFreeStateIDs;
593 
595 
598 
599  mutable tbb::spin_rw_mutex myComponentMutex;
600 
602  {
604  : signal_stateComponentAdded(new StateComponentAddedSignal)
605  , signal_stateComponentRemoved(new StateComponentRemovedSignal)
606  {};
607 
609  : signal_stateComponentAdded(orig.signal_stateComponentAdded)
610  , signal_stateComponentRemoved(orig.signal_stateComponentRemoved)
611  , currentFrameStates(orig.currentFrameStates)
612  {};
613 
615  {
616  signal_stateComponentAdded = rhs.signal_stateComponentAdded;
617  signal_stateComponentRemoved = rhs.signal_stateComponentRemoved;
618  currentFrameStates = rhs.currentFrameStates;
619 
620  return *this;
621  }
622 
623  std::shared_ptr<StateComponentAddedSignal> signal_stateComponentAdded;
624  std::shared_ptr<StateComponentRemovedSignal> signal_stateComponentRemoved;
626  };
627 
628  typedef std::vector<StateComponent> CurrentFrameStatesList;
630 
631  typedef std::unordered_map<DtUUID, std::set<DtStateData*> > StateDataByUUID;
633 
634  typedef std::unordered_map<std::string, std::set<DtStateData*> > StateDataByEntityIdentifier;
636 
638 
640 
643 
648 
650 
651  unsigned int myReserved;
652 
653  tbb::spin_mutex myUpdateCallbackMutex;
654  tbb::spin_rw_mutex myViewCreateMutex;
655  typedef std::map<DtString, Legion::View*> Views;
656  typedef std::map<Legion::SimulationDatabase*, Views> DatabaseViews;
658 
659  typedef std::vector<std::pair<DtInstanceUpdatedCallback, unsigned int> > Callbacks;
660  typedef std::map<Legion::InstanceHandle, Callbacks> InstanceUpdatedCallbacks;
661  typedef std::map<Legion::AttributeSetId, InstanceUpdatedCallbacks> InstancesUpdatedCallbacks;
663 
664  std::atomic<unsigned int> myCallbackHandle;
665 
667  std::map<DtUUID, std::map<DtUUID, DtUUID> > myHostsChangedThisFrame;
668  std::map<DtUUID, std::set<DtUUID> > myWaitingForAttachment;
669 
671 
673  typedef std::pair<std::set<DtUUID>, std::set<DtUUID> > SubordinateChangeSet;
674  std::map<DtUUID, SubordinateChangeSet> mySubordinatesChangedThisFrame;
675  std::map<DtUUID, std::set<DtUUID> > myPendingSuperiorSet;
676 
678 
679  std::vector<DtStateData*> myStateDataToBeDeleted;
681 
683  {
685  boost::shared_ptr<boost::signals2::connection> deleteConnection;
686  };
687 
688  std::map<DtStateComponent*, ComponentRemoval> myComponentsToRemove;
689  std::set<DtStateComponent*> myComponentsDeleted;
691 
692  typedef tbb::interface5::condition_variable Condition;
693  typedef tbb::mutex ConditionMutex;
694  typedef tbb::interface5::unique_lock<ConditionMutex> ConditionLock;
695  tbb::spin_mutex myAdvancedThisFrameMutex;
696  std::set<unsigned long long> myAdvancedThisFrame;
697  bool myAdvancingFrame = false;
698  bool myBlockOnAdvanceFrameJobs = true;
699  std::auto_ptr<tbb::tbb_thread> myJobsThread;
702  std::atomic<bool> myShutdownJobsThreadFlag;
703 
704  FrameStatus myFrameStatus = FrameStatus::Normal;
705  };
706 }
boost::signals2::signal< void()> signal_preAdvanceFrame
Definition: stateDataManager.h:536
std::map< DtString, Legion::View * > Views
Definition: stateDataManager.h:655
UUID is a unique ID wrapper class.
Definition: uuid.h:59
boost::signals2::signal< void(Legion::SimulationDatabase *)> signal_addVrfSpecificDataElements
Signal sent when it is ok to add columns to the entity set.
Definition: stateDataManager.h:529
unsigned long long SimStateID
Definition: stateDataTypes.h:16
StateComponentAddedSignal & signalWhenStateComponentAdded()
Definition: stateDataManager.h:375
void resizeContainer()
Definition: stateDataManager.h:369
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:189
tbb::spin_mutex mySubordinatesChangedThisFrameMutex
Definition: stateDataManager.h:670
FrameStatus frameStatus() const
Definition: stateDataManager.h:342
std::set< DtStateComponent * > myComponentsDeleted
Definition: stateDataManager.h:689
bool deleteOnRemoval
Definition: stateDataManager.h:684
std::map< DtUUID, std::map< DtUUID, DtUUID > > myHostsChangedThisFrame
Definition: stateDataManager.h:667
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:40
bool blockOnAdvanceFrameJobs() const
Definition: stateDataManager.h:144
const StateDataByLegionId & environmentalData() const
Definition: stateDataManager.h:465
bool isValid() const
Definition: stateDataManager.h:264
Condition myStartJobsCondition
Definition: stateDataManager.h:700
tbb::mutex ConditionMutex
Definition: stateDataManager.h:693
InstancesUpdatedCallbacks myInstancesUpdatedCallbacks
Definition: stateDataManager.h:662
StateComponentAddedSignal & signalWhenStateComponentRemoved(unsigned type)
Definition: stateDataManager.h:393
tbb::spin_rw_mutex myComponentMutex
Definition: stateDataManager.h:599
unsigned int myReserved
Definition: stateDataManager.h:651
std::vector< DtStateData * > StateData
Definition: stateDataManager.h:562
DtVrfParameterDb * myParameterDatabase
Definition: stateDataManager.h:677
static DtStateDataManagerCreatorFcn theStateDataManagerCreatorFcn
Definition: stateDataManager.h:637
DtStateDataManager *(* DtStateDataManagerCreatorFcn)(Legion::SimulationDatabase *, int)
Definition: stateDataManager.h:67
boost::signals2::signal< void()> signal_deleted
Definition: stateDataManager.h:558
std::atomic< bool > myShutdownJobsThreadFlag
Definition: stateDataManager.h:702
bool myPublishingOnLegionNetwork
Definition: stateDataManager.h:680
std::map< Legion::AttributeSetId, InstanceUpdatedCallbacks > InstancesUpdatedCallbacks
Definition: stateDataManager.h:661
StateComponent & operator=(const StateComponent &rhs)
Definition: stateDataManager.h:614
const DtEmitterSystemBeamStateData * beamSR
Definition: stateDataManager.h:57
std::shared_ptr< StateComponentRemovedSignal > signal_stateComponentRemoved
Definition: stateDataManager.h:624
DtClock myClock
Definition: stateDataManager.h:596
FrameStatus
Definition: stateDataManager.h:80
ConditionMutex myStartJobsConditionMutex
Definition: stateDataManager.h:701
std::set< unsigned long long > myAdvancedThisFrame
Definition: stateDataManager.h:696
boost::signals2::signal< void(DtStateComponent *)> StateComponentRemovedSignal
Definition: stateDataManager.h:361
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
tbb::spin_rw_mutex myMutex
Definition: stateDataManager.h:584
boost::signals2::signal< void(DtStateData *)> signal_aerodromeAdded
Definition: stateDataManager.h:551
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
bool runFullyThreaded() const
Definition: stateDataManager.h:355
tbb::spin_mutex myAdvancedThisFrameMutex
Definition: stateDataManager.h:695
Contains the DtUUID class declaration.
std::shared_ptr< StateComponentAddedSignal > signal_stateComponentAdded
Definition: stateDataManager.h:623
boost::signals2::signal< void(DtStateData *)> signal_unitAdded
Definition: stateDataManager.h:545
tbb::interface5::condition_variable Condition
Definition: stateDataManager.h:692
boost::signals2::signal< void()> signal_advanceFrame
Definition: stateDataManager.h:537
std::vector< StateComponent > CurrentFrameStatesList
Definition: stateDataManager.h:628
std::auto_ptr< tbb::tbb_thread > myJobsThread
Definition: stateDataManager.h:699
boost::signals2::signal< void()> signal_beginFrame
Definition: stateDataManager.h:535
const StateDataByLegionId & aerodromeData() const
Definition: stateDataManager.h:460
DtStateData * stateData(makVrf::SimStateID id)
Definition: stateDataManager.h:280
StateDataByLegionId myStateDataByLegionId
Definition: stateDataManager.h:639
StateComponent()
Definition: stateDataManager.h:603
Definition: objectType.h:27
double absRealTime() const
Definition: stateDataManager.h:291
CurrentFrameStates currentFrameStates
Definition: stateDataManager.h:625
Legion::SimulationDatabase * database()
Definition: stateDataManager.h:130
Legion::SetView< T_Class > * view(Legion::SimulationDatabase *db)
Returns the entity view for the given database.
Definition: stateDataManager.h:478
std::atomic< unsigned int > myCallbackHandle
Definition: stateDataManager.h:664
std::vector< DtTrackJamBeamInfo > DtTrackJamBeamInfoList
Definition: stateDataManager.h:61
std::unordered_map< std::string, std::set< DtStateData * > > StateDataByEntityIdentifier
Definition: stateDataManager.h:634
std::pair< std::set< DtUUID >, std::set< DtUUID > > SubordinateChangeSet
First is added, second removed.
Definition: stateDataManager.h:673
StateDataByEntityIdentifier myStateDataByEntityIdentifier
Definition: stateDataManager.h:635
bool publishingOnLegionNetwork() const
Definition: stateDataManager.h:471
const Coordinate_System * myCoordinateSystem
Definition: stateDataManager.h:641
Definition: coordSystem.h:54
const CurrentFrameStates & stateComponents() const
Definition: stateDataManager.h:401
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
boost::signals2::signal< void(const DtStateData *)> signal_stateDataAboutToBeRemoved
Signals sent for state data actions.
Definition: stateDataManager.h:525
StateDataByLegionId myAerodromeData
Definition: stateDataManager.h:646
tbb::spin_rw_mutex myViewCreateMutex
Definition: stateDataManager.h:654
Definition: stateDataManager.h:682
std::map< DtUUID, std::set< DtUUID > > myWaitingForAttachment
Definition: stateDataManager.h:668
Legion::SimulationDatabase * myUnpublishedDatabase
Definition: stateDataManager.h:587
tbb::atomic< makVrf::SimStateID > myNextSimStateID
Definition: stateDataManager.h:591
StateComponent(const StateComponent &orig)
Definition: stateDataManager.h:608
boost::signals2::signal< void(DtStateComponent *)> StateComponentAddedSignal
Definition: stateDataManager.h:360
const DtStateData * stateData(makVrf::SimStateID id) const
Definition: stateDataManager.h:269
std::set< unsigned long long > myAwaitingHandoff
Definition: stateDataManager.h:589
Definition: stateDataManager.h:55
boost::signals2::signal< void(DtStateData *)> signal_stateDataAdded
Definition: stateDataManager.h:534
boost::signals2::signal< void(const DtStateData *)> signal_aerodromeRemoved
Definition: stateDataManager.h:552
StateDataByLegionId myUnitData
Definition: stateDataManager.h:645
std::unordered_map< DtUUID, std::set< DtStateData * > > StateDataByUUID
Definition: stateDataManager.h:631
unsigned long long UInt64
Definition: stateDataTypes.h:17
void removeInstanceUpdatedCallback(Legion::SimulationDatabase *database, Legion::InstanceHandle instanceHandle, unsigned int callbackHandle)
Definition: stateDataManager.h:221
bool myOwnsDatabase
Definition: stateDataManager.h:649
void handleDataUpdated(const std::vector< typename Legion::SetView< T_Class >::InstanceUpdateData > &instanceList)
Definition: stateDataManager.h:157
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:542
bool updateOnlySpecifiedStateDataMode() const
Definition: stateDataManager.h:337
bool advancingFrame() const
Definition: stateDataManager.h:502
tbb::spin_mutex myHostsChangedThisFrameMutex
Definition: stateDataManager.h:666
const DtEmitterSystemStateComponent * emitterSystemSR
Definition: stateDataManager.h:58
boost::signals2::signal< void(unsigned long long, const DtUUID &oldUUID, const DtUUID &newUUID)> signal_uuidChanged
Definition: stateDataManager.h:554
Legion::SimulationDatabase * unpublishedDatabase()
Definition: stateDataManager.h:135
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:466
DtVrfCallbackQueue & jobProcessor()
Definition: stateDataManager.h:104
tbb::concurrent_queue< makVrf::SimStateID > myFreeStateIDs
Definition: stateDataManager.h:592
Definition: stateComponent.h:51
StateComponentAddedSignal & signalWhenStateComponentRemoved()
Definition: stateDataManager.h:388
bool myUpdateOnlySpecifiedStateDataMode
Definition: stateDataManager.h:690
StateData myStateData
Definition: stateDataManager.h:582
boost::signals2::signal< void(const DtStateData *)> signal_environmentalRemoved
Definition: stateDataManager.h:549
const Coordinate_System * coordinateSystem() const
Definition: stateDataManager.h:444
StateComponentAddedSignal & signalWhenStateComponentAdded(unsigned type)
Definition: stateDataManager.h:380
StateDataByUUID myStateDataByUUID
Definition: stateDataManager.h:632
CurrentFrameStatesList myCurrentFrameStates
Definition: stateDataManager.h:629
std::unordered_map< UInt64, DtStateData * > StateDataByLegionId
Definition: stateDataManager.h:449
const StateDataByLegionId & unitData() const
Definition: stateDataManager.h:455
DtVrfParameterDb * parameterDatabase() const
Definition: stateDataManager.h:99
boost::signals2::signal< void(const DtStateData *)> signal_unitRemoved
Definition: stateDataManager.h:546
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:533
static const SimStateID InvalidSimStateID
Definition: stateDataTypes.h:37
boost::signals2::signal< void(DtStateData *)> signal_environmentalAdded
Definition: stateDataManager.h:548
#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:594
StateDataByLegionId myEnvironmentalData
Definition: stateDataManager.h:647
boost::signals2::signal< void(makVrf::SimStateID, UInt64)> signal_stateDataRemoved
Definition: stateDataManager.h:526
boost::function< bool(DtStateData *)> PreAddCallback
Definition: stateDataManager.h:88
DatabaseViews myDatabaseViews
Definition: stateDataManager.h:657
std::map< DtStateComponent *, ComponentRemoval > myComponentsToRemove
Definition: stateDataManager.h:688
StateDataByLegionId myEntityData
Definition: stateDataManager.h:644
boost::signals2::signal< void(DtStateComponent *)> signal_stateComponentRemoved
Definition: stateDataManager.h:557
std::map< Legion::InstanceHandle, Callbacks > InstanceUpdatedCallbacks
Definition: stateDataManager.h:660
std::map< Legion::SimulationDatabase *, Views > DatabaseViews
Definition: stateDataManager.h:656
boost::signals2::signal< void(DtStateData *, bool)> signal_prepareForHandoff
Definition: stateDataManager.h:538
std::map< DtUUID, SubordinateChangeSet > mySubordinatesChangedThisFrame
Definition: stateDataManager.h:674
boost::signals2::signal< void(DtStateData *)> signal_convertedToLocal
Definition: stateDataManager.h:560
boost::function< void(const std::vector< UInt32 > &)> DtInstanceUpdatedCallback
Definition: stateDataTypes.h:21
boost::shared_ptr< boost::signals2::connection > deleteConnection
Definition: stateDataManager.h:685
std::map< DtUUID, std::set< DtUUID > > myPendingSuperiorSet
Definition: stateDataManager.h:675
The DtEmitterSystemStateComponentList is a collection of emitter systems and the beams they represent...
Definition: emitterSystemStateComponent.h:25
tbb::interface5::unique_lock< ConditionMutex > ConditionLock
Definition: stateDataManager.h:694
Definition: stateDataManager.h:601
boost::signals2::signal< void(DtStateComponent *)> signal_stateComponentAdded
Definition: stateDataManager.h:556
tbb::spin_mutex myUpdateCallbackMutex
Definition: stateDataManager.h:653
const StateDataByLegionId & entityData() const
Definition: stateDataManager.h:450
Legion::SimulationDatabase * myDatabase
Definition: stateDataManager.h:586
DtVrfCallbackQueue myJobProcessor
Definition: stateDataManager.h:597
std::vector< std::pair< DtInstanceUpdatedCallback, unsigned int > > Callbacks
Definition: stateDataManager.h:659
std::vector< DtStateData * > myStateDataToBeDeleted
Definition: stateDataManager.h:679
bool myOwnsCoordinateSystem
Definition: stateDataManager.h:642
std::set< const DtFrameStateInterface * > CurrentFrameStates
Definition: stateDataManager.h:87
boost::signals2::signal< void(const DtStateData *)> signal_entityRemoved
Definition: stateDataManager.h:543
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)