VR-Forces 5.0.2 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
stateData.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2019 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
10 //
15 //
16 #pragma once
17 
19 
26 #include <vrfutil/rwUUID.h>
27 #include <legionDataStore/simulationDatabase.h>
28 #include <legionDataStore/writeStateInstance.h>
29 #include <legionDataStore/readStateInstance.h>
30 #include "legionDataStore/view.h"
31 
32 #include <vlutil/vlString.h>
33 #include <vlpi/disEnums.h>
34 #include <tbb/spin_rw_mutex.h>
35 #include <tbb/spin_mutex.h>
36 #include <tbb/mutex.h>
37 #include <set>
38 #include <boost/signals2.hpp>
39 
40 namespace LOM
41 {
42  class WriteEntityRepository;
43  class ReadEntityRepository;
44 }
45 
46 namespace Legion
47 {
48  class SimulationDatabase;
49  class WriteStateInstance;
50 }
51 
52 class DtAppearance;
54 
55 namespace makVrf
56 {
57  class DtStateDataManager;
58  class DtLaserDesignatorStateComponent;
59  class DtIffStateComponent;
60  class DtActiveSonarStateComponent;
61  class DtTaskVisualizationStateComponent;
62  class DtRadioTransmitterStateComponent;
63  class DtNavAidRadioTransmitterStateComponent;
64  class DtUnderwaterAcousticsStateComponent;
65  class DtEmitterSystemStateComponent;
66  class DtRadioReceiverStateComponent;
67  class DtSimulatedObjectStateComponent;
68  class DtLocationStateComponent;
69 
71  {
72  private:
76 
77  public:
80 
81  template <typename T_Component>
82  bool hasStateComponent() const
83  {
84  if (hasStateComponentType(T_Component::ComponentType()))
85  {
86  return (dynamic_cast<const T_Component*>(getStateComponent(T_Component::ComponentType())) != nullptr);
87  }
88 
89  return false;
90  }
91 
92  virtual bool hasStateComponentType(DtStateComponent::StateComponentType) const = 0;
93  virtual const DtFrameStateInterface* getStateComponent(DtStateComponent::StateComponentType, int index = 0) const = 0;
94  virtual void aboutToBeDeleted();
95 
96  unsigned long long legionGlobalId() const;
97  mutable boost::signals2::signal<void (const DtExternalFrameStateInterface*)> signal_externalFrameStateToBeDestroyed;
98 
99  protected:
101 
102  virtual void removeStateComponent(const DtFrameStateInterface* fc = 0) = 0;
103  virtual void addStateComponent(const DtFrameStateInterface* comp) = 0;
104  virtual void addStateComponent(DtFrameStateInterface*) { throw DtUnimplementedMethod("The addStateComponent() method is not implemented for this class."); };
105 
106  virtual const DtString& markingText() const { throw DtUnimplementedMethod("The const DtString markingText() const is unimplmented for this class."); };
107 
108  protected:
109  DtStateData* myStateData;
110  bool myCleared;
111  };
112 
114  {
115  public:
118  {
119  }
120 
121  virtual ~DtExternalNextFrameState();
122 
124 
126  template <typename T_Component>
127  T_Component* addStateComponent(bool checkWritable = false, bool isRemote = false);
128 
130  void nextFrameRemoveStateComponent(const DtFrameStateInterface* component);
131 
132  template <typename T_Component>
133  void removeStateComponents();
134 
136  template <typename T_Component>
137  const T_Component* getStateComponent(int index = 0) const
138  {
139  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
140 
141  const T_Component* comp = dynamic_cast<const T_Component*>(getStateComponent(scType, index));
142 
143  if (!comp)
144  {
145  throw DtUnknownStateComponent(T_Component::StringType());
146  }
147 
148  return comp;
149  }
150 
151  template <typename T_Component>
152  std::vector<T_Component*> getStateComponentList() const
153  {
154  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
155  std::vector<T_Component*> results;
156 
157  if (scType < myFrameState.size())
158  {
159  std::vector<DtFrameStateInterface*>::const_iterator iter = myFrameState[scType].begin();
160  std::vector<DtFrameStateInterface*>::const_iterator end = myFrameState[scType].end();
161  while (iter != end)
162  {
163  results.push_back(dynamic_cast<T_Component*>(*iter));
164  ++iter;
165  }
166  }
167 
168  return results;
169  }
170 
172  {
173  if (scType < myFrameState.size())
174  {
175  if (index < myFrameState[scType].size())
176  {
177  return myFrameState[scType][index];
178  }
179  }
180 
181  return 0;
182  }
183 
185  {
186  if (scType < myFrameState.size())
187  {
188  if (index < myFrameState[scType].size())
189  {
190  return myFrameState[scType][index];
191  }
192  }
193 
194  return 0;
195  }
196 
197  bool hasStateComponentType(DtStateComponent::StateComponentType scType) const;
198  void addStateComponent(const DtFrameStateInterface* comp);
199  void addStateComponent(DtFrameStateInterface* comp);
200 
201  template <typename T_Component>
202  bool isWritable()
203  {
204  T_Component* comp = getStateComponent<T_Component>(0, false);
205 
206  return (comp && comp->isWritable());
207  }
208 
210  template <typename T_Component>
211  T_Component* getStateComponent(int index = 0, bool checkWritable = true)
212  {
213  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
214 
215  if (scType < myFrameState.size())
216  {
217  if (index < myFrameState[scType].size())
218  {
219  DtFrameStateInterface* sc = myFrameState[scType][index];
220 
221  if (sc)
222  {
223  T_Component* comp = dynamic_cast<T_Component*>(sc);
224 
225  if (comp && (!checkWritable || comp->isWritable()))
226  {
227  return comp;
228  }
229  else
230  {
231  throw DtUnknownStateComponent("This object cannot have state written to it.");
232  }
233  }
234  }
235  }
236 
237  throw DtUnknownStateComponent(T_Component::StringType());
238  }
239 
240  void takeControlOfComponent(DtStateComponent*);
241 
242  const DtString& markingText() const;
243 
245  {
246  return myFrameState.size();
247  }
248 
249  protected:
250  friend class DtStateData;
251 
254  void removeStateComponent(const DtFrameStateInterface* component);
255 
256  protected:
257  std::vector<std::vector<DtFrameStateInterface*> > myFrameState;
258  };
259 
261  {
262  public:
265  {
266  }
267 
268  virtual ~DtExternalCurrentFrameState();
269 
270  bool isValid() const;
271 
273  template <typename T_Component>
274  const T_Component* getStateComponent(int index = 0) const;
275 
276  const DtFrameStateInterface* getStateComponent(DtStateComponent::StateComponentType, int index = 0) const;
277 
278  template <typename T_Component>
279  std::vector<const T_Component*> getStateComponentList() const
280  {
281  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
282  std::vector<const T_Component*> results;
283 
284  if (scType < myFrameState.size())
285  {
286  std::vector<const DtFrameStateInterface*>::const_iterator iter = myFrameState[scType].begin();
287  std::vector<const DtFrameStateInterface*>::const_iterator end = myFrameState[scType].end();
288  while (iter != end)
289  {
290  results.push_back(dynamic_cast<const T_Component*>(*iter));
291  ++iter;
292  }
293  }
294 
295  return results;
296  }
297 
298  void addStateComponent(const DtFrameStateInterface* comp);
299 
300  bool hasStateComponentType(DtStateComponent::StateComponentType scType) const;
301 
302  const DtString& markingText() const;
303 
305  {
306  return myFrameState.size();
307  }
308 
309  bool advancedFrame() const;
310 
311  protected:
312  friend class DtStateData;
313 
316  void removeStateComponent(const DtFrameStateInterface* component);
317 
318  protected:
319  std::vector<std::vector<const DtFrameStateInterface*> > myFrameState;
320  };
321 
337  {
338  public:
339  typedef unsigned long long SimStateID;
341  {
344  PublishComponentsOnly
345  };
346 
347  public:
348 
350  DtStateData(SimStateID, Legion::SimulationDatabase*, DtStateDataManager*);
351  DtStateData(SimStateID, makVrf::UInt64, Legion::SimulationDatabase*, DtStateDataManager*);
352 
354  virtual ~DtStateData();
355 
357  virtual void invalidate();
358  virtual bool isValid() const;
359  virtual bool isWritable() const;
360 
361  template <typename T_Component>
363  {
364  if (myWriteStateInstance.isValid())
365  {
366  return myWriteStateInstance.typeExtensionCount<T_Component>();
367  }
368  else
369  {
370  return getCurrentFrameNumberOfLegionComponents<T_Component>();
371  }
372  }
373 
374  template <typename T_Component>
376  {
377  if (myReadStateInstance && myReadStateInstance->isValid())
378  {
379  return myReadStateInstance->typeExtensionCount<T_Component>();
380  }
381  else
382  {
383  return 0;
384  }
385  }
386 
387  template <typename T_Component>
388  unsigned int componentCount() const
389  {
390  if (myWriteStateInstance.isValid())
391  {
392  return myWriteStateInstance.typeExtensionCount<T_Component>();
393  }
394  else if (myReadStateInstance && myReadStateInstance->isValid())
395  {
396  return myReadStateInstance->typeExtensionCount<T_Component>();
397  }
398 
399  return 0;
400  }
401 
402  template <typename T_Component>
403  T_Component findNextFrameLegionComponent(int index = 0)
404  {
405  if (myWriteStateInstance.isValid())
406  {
407  return myWriteStateInstance.findTypeExtension<T_Component>(std::max(0, index));
408  }
409  else
410  {
411  return findCurrentFrameLegionComponent<T_Component>(index);
412  }
413  }
414 
415  template <typename T_Component>
416  T_Component findCurrentFrameLegionComponent(int index = 0) const
417  {
418  if (myReadStateInstance && myReadStateInstance->isValid())
419  {
420  if (T_Component::isType(myReadStateInstance->instanceHandle()))
421  {
422  return T_Component(myReadStateInstance->instanceHandle());
423  }
424 
425  return myReadStateInstance->findTypeExtension<T_Component>(std::max(0, index));
426  }
427  else
428  {
429  return T_Component();
430  }
431  }
432 
433  bool advancedFrame() const
434  {
435  return myAdvancedFrame;
436  }
437 
439  {
440  return &myNextFrameState;
441  }
442 
444  {
445  return &myCurrentFrameState;
446  }
447 
448  virtual DtStateComponent* createStateComponent(DtStateComponent::StateComponentType t);
449 
451  template <typename T_Component>
452  T_Component* addStateComponent(bool checkWritable = false, bool isRemote = false)
453  {
454  return myNextFrameState.addStateComponent<T_Component>(checkWritable, isRemote);
455  }
456 
457  template <typename T_Component>
458  bool isWritable()
459  {
460  return myNextFrameState.isWritable<T_Component>();
461  }
462 
464  {
465  if (myWriteStateInstance.isValid() && myDatabase)
466  {
467  destroyInstance(myWriteStateInstance);
468  myWriteStateInstance = Legion::WriteStateInstance();
469  delete myReadStateInstance;
470  myReadStateInstance = nullptr;
471  }
472  }
473 
474  void destroyInstance(const Legion::WriteStateInstance& wsi)
475  {
476  database()->destroyInstance(wsi);
477  }
478 
480  virtual void createAndInitializeMainInstance();
481 
482  template <typename T_Component>
483  T_Component createMainInstance()
484  {
485  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
486  myWriteStateInstance = myDatabase->createInstance<T_Component>();
487  lock.release();
488 
489  return T_Component(myWriteStateInstance.instanceHandle());
490  }
491 
492  template <typename T_Component>
494  {
495  if (!myWriteStateInstance.isValid())
496  {
497  throw DtUnknownStateComponent("Cannot create a write Legion component on this object.");
498  }
499  else if (myDatabase)
500  {
501  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
502  T_Component comp = myDatabase->createInstance<T_Component>();
503  lock.release();
504 
505  return comp;
506  }
507 
508  return T_Component();
509  }
510 
511  template <typename T_Component>
512  T_Component createInstance()
513  {
514  if (!myWriteStateInstance.isValid())
515  {
516  throw DtUnknownStateComponent("Cannot create a write Legion component on this object.");
517  }
518  else if (myDatabase)
519  {
520  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
521  T_Component comp = myDatabase->createInstance<T_Component>();
522  lock.release();
523 
524  myWriteStateInstance.addExtension(comp);
525 
526  return comp;
527  }
528 
529  return T_Component();
530  }
531 
532  template <typename T_Component>
534  {
535  if (T_Component::ComponentType() < myStateComponents.size())
536  {
537  if (index < myStateComponents[T_Component::ComponentType()].size())
538  {
539  return myStateComponents[T_Component::ComponentType()][index];
540  }
541  }
542 
543  return 0;
544  }
545 
546  template <typename T_Component>
547  std::vector<T_Component*> getNextFrameStateComponentList() const
548  {
549  return myNextFrameState.getStateComponentList<T_Component>();
550  }
551 
552  template <typename T_Component>
553  std::vector<const T_Component*> getCurrentFrameStateComponentList() const
554  {
555  return myCurrentFrameState.getStateComponentList<T_Component>();
556  }
557 
558  template <typename T_Component>
559  bool hasStateComponent(bool checkWritable = false)
560  {
561  try
562  {
563  if (nextFrameState()->hasStateComponent<T_Component>())
564  {
565  if (checkWritable)
566  {
567  return (nextFrameStateComponent<T_Component>()->isWritable());
568  }
569 
570  return true;
571  }
572  else
573  {
574  return currentFrameState()->hasStateComponent<T_Component>();
575  }
576  }
577  catch(...)
578  {
579  return false;
580  }
581 
582  return false;
583  }
584 
585  template <typename T_Component>
586  const bool hasStateComponent() const
587  {
588  if (currentFrameState()->hasStateComponent<T_Component>())
589  {
590  return (dynamic_cast<const T_Component*>(currentFrameState()->getStateComponent<T_Component>()) != nullptr);
591  }
592 
593  return false;
594  }
595 
596  template <typename T_Component>
597  T_Component* nextFrameStateComponent()
598  {
599  T_Component* comp = nextFrameState()->getStateComponent<T_Component>(0);
600  if (comp && comp->isWritable())
601  {
602  return comp;
603  }
604  else
605  {
606  throw DtUnknownStateComponent("This object cannot have state written to it.");
607  }
608  }
609 
610  template <typename T_Component>
611  const T_Component* currentFrameStateComponent() const
612  {
613  return currentFrameState()->getStateComponent<T_Component>(0);
614  }
615 
618  virtual const DtFrameStateInterface* currentFrameStateFor(const DtFrameStateInterface*) const;
619 
620  void removeComponent(Legion::WriteStateInstance& set);
621 
623  bool frozen() const;
624 
625  const DtUUID& uuid() const;
626  void setUUID(const DtUUID&);
627 
628  void setGlobalId(const DtString& s);
629  const DtString& globalId() const;
630 
631  void setMarkingText(const DtString& name);
632  const DtString& markingText() const;
633 
634  const DtString parentGlobalId() const;
635  DtString parentGlobalId();
636 
637  const DtUUID& nextFrameHostId() const;
638  const DtUUID& currentFrameHostId() const;
639 
640  bool isBackgroundEntity() const;
641 
643  void setEntityType(const DtObjectType& type);
644  void setObjectType(const DtObjectType& type) { setEntityType(type); };
645 
646  DtEntityType entityType() const { return DtEntityType(objectType()); };
647  DtObjectType objectType() const;
648 
649  void setEntityId(const DtEntityIdentifier& s);
650  DtEntityIdentifier entityId() const;
651 
653  virtual void setAwaitingTransfer(bool);
654  bool awaitingTransfer() const
655  {
656  return myAwaitingTransfer;
657  }
658 
660  virtual void initializeParameterData(const DtVrfObjectParameters*);
661 
663  virtual bool createPublicData(const DtVrfObjectParameters*, bool isReflectedObject);
664 
665  SimStateID id() const
666  {
667  return mySimStateID;
668  }
669 
670  template <typename T_Class>
671  void removeInstanceUpdatedCallback(Legion::InstanceHandle instanceHandle, unsigned int callbackHandle);
672  template <typename T_Class>
673  unsigned int addInstanceUpdatedCallback(DtInstanceUpdatedCallback callback, Legion::InstanceHandle instanceHandle,
674  const std::vector<Legion::AttributeIndex>& attributeIndexFilter = std::vector<Legion::AttributeIndex>());
675 
676  virtual void advanceFrame();
677 
679  virtual void takeControlOfComponent(DtStateComponent*);
680 
682  virtual void setCoordinateSystem(const Coordinate_System*);
683 
684  void setIsLocal(bool b);
685  bool isLocal() const;
686 
688  {
689  return myPublishFlag;
690  }
691 
692  bool isPublishedOnNetwork() const
693  {
694  return ((myPublishFlag == PublishAll) || (myPublishFlag == PublishComponentsOnly));
695  }
696 
698  {
699  return myStateDataManager;
700  }
701 
703  {
704  return myStateDataManager;
705  }
706 
707  double absRealTime() const;
708 
710  {
711  return myCoordinateSystem;
712  }
713 
714  Legion::WriteStateInstance writeStateInstance()
715  {
716  return myWriteStateInstance;
717  }
718 
719  Legion::ReadStateInstance* readStateInstance() const
720  {
721  return myReadStateInstance;
722  }
723 
725  UInt64 legionGlobalId() const;
726 
728  virtual void clearComponents();
729 
732  virtual DtLaserDesignatorStateComponent* addLaserDesignator(bool isRemote = false);
733  virtual void removeLaserDesignator(DtLaserDesignatorStateComponent*);
734 
735  virtual DtTaskVisualizationStateComponent* lineTaskVisualization(const DtString& visualName, const DtString& component);
736  virtual DtTaskVisualizationStateComponent* pointTaskVisualization(const DtString& visualName, const DtString& component);
737  virtual DtTaskVisualizationStateComponent* areaTaskVisualization(const DtString& visualName, const DtString& component);
738  virtual DtTaskVisualizationStateComponent* textTaskVisualization(const DtString& visualName, const DtString& component);
739  virtual void removeTaskVisualization(DtTaskVisualizationStateComponent*);
740 
741  virtual DtEmitterSystemStateComponent* addEmitterSystem(bool isRemote = false);
742  virtual void removeEmitterSystem(DtEmitterSystemStateComponent*);
743 
744  virtual DtActiveSonarStateComponent* addActiveSonarSystem(bool isRemote = false);
745  virtual void removeActiveSonarSystem(DtActiveSonarStateComponent*);
746 
747  virtual DtRadioTransmitterStateComponent* addRadioTransmitter(bool isRemote = false);
748  virtual void removeRadioTransmitter(DtRadioTransmitterStateComponent*);
749 
750  virtual DtNavAidRadioTransmitterStateComponent* addNavAidRadioTransmitter(bool isRemote = false);
751  virtual void removeNavAidRadioTransmitter(DtNavAidRadioTransmitterStateComponent*);
752 
753  virtual DtRadioReceiverStateComponent* addRadioReceiver(bool isRemote = false);
754  virtual void removeRadioReceiver(DtRadioReceiverStateComponent*);
755 
757  virtual DtIffStateComponent* getOrCreateIffSystem(bool isRemote = false);
758  virtual void removeIffSystem();
759 
761  virtual DtUnderwaterAcousticsStateComponent* getOrCreateUnderwaterAcousticsSystem(bool isRemote = false);
762  virtual void removeUnderwaterAcousticsSystem();
763 
764  virtual void removeStateComponent(DtFrameStateInterface*);
766 
767  Legion::SimulationDatabase* database()
768  {
769  return myDatabase;
770  }
771 
774  virtual void convertToRemote();
775 
777  virtual void convertToLocal();
778 
781  virtual int indexOfComponent(const DtFrameStateInterface*) const;
782 
784  virtual UInt64 instanceHandle(const DtFrameStateInterface*) const;
785 
787  virtual void shuttingDown();
788 
794  static void addDefaultPublicDataFor(const std::string& type, const std::string& componentCreator);
795  static void removeDefaultPublicDataFor(const std::string& type, const std::string& componentCreator);
796  static std::set<std::string> defaultPublicDataFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& parameterType);
798 
800  static void addPublicDataFor(const std::string& type, const std::string& componentCreator);
801  static void removePublicDataFor(const std::string& type, const std::string& componentCreator);
802  static std::set<std::string> additionalPublicDataFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& parameterType);
804 
805 
808  static void setDefaultMainComponentFor(const std::string& type, const std::string& defaultPublicData);
809  static std::string defaultMainComponentFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& type);
811 
814  virtual void aboutToBeDeleted();
815 
816  virtual void setPublishingOnLegionNetwork(bool b);
818  {
819  return myPublishingOnLegionNetwork;
820  }
821 
822  protected:
823  virtual const DtSimulatedObjectStateComponent* currentFrameSimulatedObjectStateComponent() const;
824  virtual const DtLocationStateComponent* currentFrameLocationStateComponent() const;
825  virtual DtSimulatedObjectStateComponent* nextFrameSimulatedObjectStateComponent();
826 
828  virtual DtStateData* currentFrameHostStateData() const;
829 
831  virtual bool createMainData(const DtVrfObjectParameters* params);
832 
833  virtual void hostChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
834  virtual void setupStateComponent(DtStateComponent*, const DtVrfObjectParameters* params = 0);
835  virtual void subordinatesChanged(const std::vector<DtUUID>& oldSubordinates, const std::vector<DtUUID>& newSubordinates);
836 
837  friend class DtStateDataManager;
838 
841  {
842  myPublishFlag = b;
843  }
844 
847  virtual void completeRemoteConversion();
848 
849  virtual void hostWasDeleted();
850 
851  protected:
853 
854  virtual void removeStateComponent(DtStateComponent::StateComponentType t);
855  virtual void uuidChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
856 
857  public:
859  mutable boost::signals2::signal<void (const DtStateData*)> signal_firstFrameAdvance;
860 
861  boost::signals2::signal<void (const DtUUID&, const DtUUID&, SimStateID)> signal_uuidChanged;
862 
864  boost::signals2::signal<void (const DtStateData*, const DtUUID& oldUUID, const DtUUID& newUUID)> signal_hostChanged;
865 
866  mutable boost::signals2::signal<void (const DtStateData*)> signal_stateDataToBeDestroyed;
867  boost::signals2::signal<void (SimStateID)> signal_preFrameAdvanced;
868 
870  mutable boost::signals2::signal<void (const DtStateData*)> signal_frameAdvanced;
871 
873  boost::signals2::signal<void (const DtStateData*)> signal_modified;
874 
875  boost::signals2::signal<void (const DtStateData*)> signal_convertingToRemote;
876  boost::signals2::signal<void (const DtStateData*)> signal_convertedToRemote;
877 
878  boost::signals2::signal<void (const DtStateData*)> signal_convertingToLocal;
879  boost::signals2::signal<void (const DtStateData*)> signal_convertedToLocal;
880 
881  boost::signals2::signal<void (const DtStateData*, const std::vector<DtUUID>& added, const std::vector<DtUUID>& removed)> signal_subordinatesChanged;
882 
883  protected:
889 
891  Legion::SimulationDatabase* myDatabase;
892 
894  Legion::WriteStateInstance myWriteStateInstance;
895  Legion::ReadStateInstance* myReadStateInstance;
896 
898 
901 
903 
905 
906  std::vector<std::vector<DtStateComponent*> > myStateComponents;
907  std::vector<std::vector<DtStateComponent*> > myCreatedStateComponents;
908  std::set<DtFrameStateInterface*> myRemoveStateComponents;
909 
913 
915  std::atomic<unsigned int> myComponentNumber;
916 
917  boost::signals2::scoped_connection mySubordinatesChangedConnection;
918  boost::signals2::scoped_connection myHostChangedConnection;
919  boost::signals2::scoped_connection myUUIDChangedConnection;
920  mutable boost::signals2::scoped_connection myHostWasDeletedConnection;
921 
925  typedef std::map<std::string, std::set<std::string> > PublicData;
928 
929  typedef std::map<std::string, std::string> DefaultMainComponentMap;
931  bool myCleared;
932 
936 
939  const DtLocationStateComponent* myNextFrameLocationStateComponent = nullptr;
942  mutable tbb::spin_rw_mutex myCurrentFrameHostStateDataMutex;
943  static tbb::mutex theCreateInstanceMutex;
944  };
945 }
946 
947 #include <vrfStateData/stateData.inl>
bool isWritable()
Definition: stateData.h:202
UUID is a unique ID wrapper class.
Definition: rwUUID.h:229
bool myAdvancedFrame
Definition: stateData.h:910
Instances of DtVrfObjectParameters are the readable/writeable objects that contain the information ne...
Definition: vrfObjectParameters.h:63
T_Component * nextFrameStateComponent()
Definition: stateData.h:597
std::vector< T_Component * > getNextFrameStateComponentList() const
Definition: stateData.h:547
const DtSimulatedObjectStateComponent * myCurrentFrameSimulatedObjectStateComponent
Definition: stateData.h:937
DtExternalCurrentFrameState(DtStateData *sd)
Definition: stateData.h:263
Definition: stateDataTypes.h:23
unsigned long long SimStateID
Definition: stateData.h:339
std::vector< const T_Component * > getStateComponentList() const
Definition: stateData.h:279
const bool hasStateComponent() const
Definition: stateData.h:586
boost::signals2::scoped_connection mySubordinatesChangedConnection
Definition: stateData.h:917
boost::signals2::signal< void(SimStateID)> signal_preFrameAdvanced
Definition: stateData.h:867
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: radioTransmitterStateComponent.h:139
T_Component * getStateComponent(int index=0, bool checkWritable=true)
The current state frame data.
Definition: stateData.h:211
int mySessionId
Definition: stateData.h:904
boost::signals2::signal< void(const DtStateData *)> signal_convertedToLocal
Definition: stateData.h:879
The DtLocationStateComponent interface contains the interface that all DtLocationStateComponents can ...
Definition: locationStateComponent.h:25
DtEntityType entityType() const
Definition: stateData.h:646
int getCurrentFrameNumberOfLegionComponents() const
Definition: stateData.h:375
const Coordinate_System * myCoordinateSystem
Definition: stateData.h:902
unsigned int StateComponentType
Definition: stateComponent.h:55
std::vector< std::vector< DtStateComponent * > > myStateComponents
Definition: stateData.h:906
int numberOfFrameStates() const
Definition: stateData.h:304
boost::signals2::signal< void(const DtStateData *)> signal_modified
Signal sent if this state had modified components.
Definition: stateData.h:873
PublishFlag myPublishFlag
Simulated locally vs. remote representation.
Definition: stateData.h:900
The DtSimulatedObjectStateComponent is an interface that all main components (those that are consider...
Definition: simulatedObjectStateComponent.h:21
T_Component createUnattachedInstance()
Definition: stateData.h:493
static tbb::mutex theCreateInstanceMutex
Definition: stateData.h:943
static PublicData theDefaultPublicData
Definition: stateData.h:926
Definition: stateData.h:342
Legion::SimulationDatabase * database()
Definition: stateData.h:767
PublishFlag publishFlag() const
Definition: stateData.h:687
static DefaultMainComponentMap theDefaultMainComponentMap
Definition: stateData.h:930
voidpf void uLong size
Definition: ioapi.h:39
const DtStateDataManager * stateDataManager() const
Definition: stateData.h:702
const DtFrameStateInterface * getStateComponent(DtStateComponent::StateComponentType scType, int index=0) const
Definition: stateData.h:171
DtFrameStateInterface * getStateComponent(DtStateComponent::StateComponentType scType, int index=0)
Definition: stateData.h:184
void setPublishFlag(PublishFlag b)
Only called during construction.
Definition: stateData.h:840
Legion::SimulationDatabase * myDatabase
Definition: stateData.h:891
bool hasStateComponent(bool checkWritable=false)
Definition: stateData.h:559
Definition: stateData.h:113
boost::signals2::signal< void(const DtStateData *)> signal_frameAdvanced
Signal sent regardless of whether or not this state had any modified components.
Definition: stateData.h:870
Contains the DtUUID class declaration.
PublishFlag
Definition: stateData.h:340
Legion::ReadStateInstance * myReadStateInstance
Definition: stateData.h:895
unsigned int componentCount() const
Definition: stateData.h:388
std::vector< std::vector< DtStateComponent * > > myCreatedStateComponents
Definition: stateData.h:907
T_Component findNextFrameLegionComponent(int index=0)
Definition: stateData.h:403
SimStateID id() const
Definition: stateData.h:665
const DtVrfObjectParameters * myParameters
Definition: stateData.h:933
T_Component createInstance()
Definition: stateData.h:512
Definition: stateData.h:343
T_Component findCurrentFrameLegionComponent(int index=0) const
Definition: stateData.h:416
void destroyInstance(const Legion::WriteStateInstance &wsi)
Definition: stateData.h:474
int getNextFrameNumberOfLegionComponents()
Definition: stateData.h:362
std::vector< const T_Component * > getCurrentFrameStateComponentList() const
Definition: stateData.h:553
static PublicData theAdditionalPublicData
Definition: stateData.h:927
Definition: objectType.h:27
boost::signals2::scoped_connection myHostChangedConnection
Definition: stateData.h:918
std::vector< T_Component * > getStateComponentList() const
Definition: stateData.h:152
boost::signals2::signal< void(const DtExternalFrameStateInterface *)> signal_externalFrameStateToBeDestroyed
Definition: stateData.h:97
DtStateComponent * getStateComponent(int index=0)
Definition: stateData.h:533
DtStateData * myCurrentFrameHostStateData
Definition: stateData.h:941
Definition: coordSystem.h:54
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:336
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: laserDesignatorStateComponent.h:56
bool myPublishingOnLegionNetwork
Definition: stateData.h:934
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: activeSonarStateComponent.h:286
DtExternalNextFrameState * nextFrameState()
Definition: stateData.h:438
Legion::WriteStateInstance myWriteStateInstance
The basic data. This is what all components are hung off of if they are STE compliant.
Definition: stateData.h:894
std::atomic< unsigned int > myComponentNumber
Definition: stateData.h:915
boost::signals2::signal< void(const DtStateData *, const DtUUID &oldUUID, const DtUUID &newUUID)> signal_hostChanged
Signal sent when the host has changed.
Definition: stateData.h:864
std::map< std::string, std::string > DefaultMainComponentMap
Definition: stateData.h:929
const Coordinate_System * coordinateSystem() const
Definition: stateData.h:709
DtExternalCurrentFrameState myCurrentFrameState
Definition: stateData.h:888
boost::signals2::signal< void(const DtUUID &, const DtUUID &, SimStateID)> signal_uuidChanged
Definition: stateData.h:861
bool isWritable()
Definition: stateData.h:458
boost::signals2::signal< void(const DtStateData *)> signal_convertingToRemote
Definition: stateData.h:875
std::map< std::string, std::set< std::string > > PublicData
This is added for systems that might not have updated the ope files to the new format to get public d...
Definition: stateData.h:925
void destroyMainInstance()
Definition: stateData.h:463
Legion::ReadStateInstance * readStateInstance() const
Definition: stateData.h:719
DtStateDataManager * myStateDataManager
Definition: stateData.h:890
bool myMainComponentOnLegion
Definition: stateData.h:935
Definition: stateData.h:260
UInt64 myLegionGlobalId
Definition: stateData.h:914
DtExternalNextFrameState(DtStateData *sd)
Definition: stateData.h:116
Legion::WriteStateInstance writeStateInstance()
Definition: stateData.h:714
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
bool advancedFrame() const
Definition: stateData.h:433
Definition: stateDataTypes.h:28
Definition: stateComponent.h:51
boost::signals2::scoped_connection myUUIDChangedConnection
Definition: stateData.h:919
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: radioReceiverStateComponent.h:64
const DtLocationStateComponent * myCurrentFrameLocationStateComponent
Definition: stateData.h:938
const DtExternalCurrentFrameState * currentFrameState() const
Definition: stateData.h:443
std::set< DtFrameStateInterface * > myRemoveStateComponents
Definition: stateData.h:908
boost::signals2::scoped_connection myHostWasDeletedConnection
Definition: stateData.h:920
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: navAidRadioTransmitterStateComponent.h:20
bool myCleared
Definition: stateData.h:110
std::vector< std::vector< DtFrameStateInterface * > > myFrameState
Definition: stateData.h:257
Definition: stateData.h:70
boost::signals2::signal< void(const DtStateData *)> signal_stateDataToBeDestroyed
Definition: stateData.h:866
bool myConvertToRemote
Definition: stateData.h:911
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: underwaterAcousticsStateComponent.h:106
bool publishingOnLegionNetwork() const
Definition: stateData.h:817
#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 awaitingTransfer() const
Definition: stateData.h:654
bool myAwaitingTransfer
Definition: stateData.h:912
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: iffStateComponent.h:428
DtStateDataManager * stateDataManager()
Definition: stateData.h:697
void setObjectType(const DtObjectType &type)
Definition: stateData.h:644
const T_Component * getStateComponent(int index=0) const
The current state frame data.
Definition: stateData.h:137
bool myCleared
Definition: stateData.h:931
boost::signals2::signal< void(const DtStateData *)> signal_convertingToLocal
Definition: stateData.h:878
tbb::spin_rw_mutex myCurrentFrameHostStateDataMutex
Definition: stateData.h:942
DtExternalNextFrameState myNextFrameState
Even though this class contains the components, the frame classes will give access to those component...
Definition: stateData.h:887
1) Define the interface class that will be used to represent the next and current frames...
Definition: taskVisualizationStateComponent.h:260
Contains the DtStateComponent class declaration.
virtual void addStateComponent(DtFrameStateInterface *)
Definition: stateData.h:104
DtSimulatedObjectStateComponent * myNextFrameSimulatedObjectStateComponent
Definition: stateData.h:940
boost::function< void(const std::vector< UInt32 > &)> DtInstanceUpdatedCallback
Definition: stateDataTypes.h:21
boost::signals2::signal< void(const DtStateData *)> signal_convertedToRemote
Definition: stateData.h:876
T_Component createMainInstance()
Definition: stateData.h:483
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:282
T_Component * addStateComponent(bool checkWritable=false, bool isRemote=false)
Using the global state component factory, creates and adds a new state of the given type...
Definition: stateData.h:452
bool hasStateComponent() const
Definition: stateData.h:82
bool isPublishedOnNetwork() const
Definition: stateData.h:692
SimStateID mySimStateID
Definition: stateData.h:897
std::vector< std::vector< const DtFrameStateInterface * > > myFrameState
Definition: stateData.h:319
const T_Component * currentFrameStateComponent() const
Definition: stateData.h:611
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:71
int numberOfFrameStates() const
Definition: stateData.h:244
boost::signals2::signal< void(const DtStateData *)> signal_firstFrameAdvance
Signal sent on the first frame advance.
Definition: stateData.h:859

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)