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

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)