VR-Forces 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  class DtAisDataStateComponent;
70  class DtAircraftLightingStateComponent;
71  class DtGroundVehicleLightingStateComponent;
72 
74  {
75  private:
79 
80  public:
83 
84  template <typename T_Component>
85  bool hasStateComponent() const
86  {
87  if (hasStateComponentType(T_Component::ComponentType()))
88  {
89  return (dynamic_cast<const T_Component*>(getStateComponent(T_Component::ComponentType())) != nullptr);
90  }
91 
92  return false;
93  }
94 
95  virtual bool hasStateComponentType(DtStateComponent::StateComponentType) const = 0;
96  virtual const DtFrameStateInterface* getStateComponent(DtStateComponent::StateComponentType, int index = 0) const = 0;
97  virtual void aboutToBeDeleted();
98 
99  unsigned long long legionGlobalId() const;
100  mutable boost::signals2::signal<void (const DtExternalFrameStateInterface*)> signal_externalFrameStateToBeDestroyed;
101 
102  protected:
104 
105  virtual void removeStateComponent(const DtFrameStateInterface* fc = 0) = 0;
106  virtual void addStateComponent(const DtFrameStateInterface* comp) = 0;
107  virtual void addStateComponent(DtFrameStateInterface*) { throw DtUnimplementedMethod("The addStateComponent() method is not implemented for this class."); };
108 
109  virtual const DtString& markingText() const { throw DtUnimplementedMethod("The const DtString markingText() const is unimplmented for this class."); };
110 
111  protected:
112  DtStateData* myStateData;
113  bool myCleared;
114  };
115 
117  {
118  public:
121  {
122  }
123 
124  virtual ~DtExternalNextFrameState();
125 
127 
129  template <typename T_Component>
130  T_Component* addStateComponent(bool checkWritable = false, bool isRemote = false);
131 
133  void nextFrameRemoveStateComponent(const DtFrameStateInterface* component);
134 
135  template <typename T_Component>
136  void removeStateComponents();
137 
139  template <typename T_Component>
140  const T_Component* getStateComponent(int index = 0) const
141  {
142  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
143 
144  const T_Component* comp = dynamic_cast<const T_Component*>(getStateComponent(scType, index));
145 
146  if (!comp)
147  {
148  throw DtUnknownStateComponent(T_Component::StringType());
149  }
150 
151  return comp;
152  }
153 
154  template <typename T_Component>
155  std::vector<T_Component*> getStateComponentList() const
156  {
157  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
158  std::vector<T_Component*> results;
159 
160  if (scType < myFrameState.size())
161  {
162  std::vector<DtFrameStateInterface*>::const_iterator iter = myFrameState[scType].begin();
163  std::vector<DtFrameStateInterface*>::const_iterator end = myFrameState[scType].end();
164  while (iter != end)
165  {
166  results.push_back(dynamic_cast<T_Component*>(*iter));
167  ++iter;
168  }
169  }
170 
171  return results;
172  }
173 
175  {
176  if (scType < myFrameState.size())
177  {
178  if (index < myFrameState[scType].size())
179  {
180  return myFrameState[scType][index];
181  }
182  }
183 
184  return 0;
185  }
186 
188  {
189  if (scType < myFrameState.size())
190  {
191  if (index < myFrameState[scType].size())
192  {
193  return myFrameState[scType][index];
194  }
195  }
196 
197  return 0;
198  }
199 
200  bool hasStateComponentType(DtStateComponent::StateComponentType scType) const;
201  void addStateComponent(const DtFrameStateInterface* comp);
202  void addStateComponent(DtFrameStateInterface* comp);
203 
204  template <typename T_Component>
205  bool isWritable()
206  {
207  T_Component* comp = getStateComponent<T_Component>(0, false);
208 
209  return (comp && comp->isWritable());
210  }
211 
213  template <typename T_Component>
214  T_Component* getStateComponent(int index = 0, bool checkWritable = true)
215  {
216  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
217 
218  if (scType < myFrameState.size())
219  {
220  if (index < myFrameState[scType].size())
221  {
222  DtFrameStateInterface* sc = myFrameState[scType][index];
223 
224  if (sc)
225  {
226  T_Component* comp = dynamic_cast<T_Component*>(sc);
227 
228  if (comp && (!checkWritable || comp->isWritable()))
229  {
230  return comp;
231  }
232  else
233  {
234  throw DtUnknownStateComponent("This object cannot have state written to it.");
235  }
236  }
237  }
238  }
239 
240  throw DtUnknownStateComponent(T_Component::StringType());
241  }
242 
243  void takeControlOfComponent(DtStateComponent*);
244 
245  const DtString& markingText() const;
246 
248  {
249  return myFrameState.size();
250  }
251 
252  protected:
253  friend class DtStateData;
254 
257  void removeStateComponent(const DtFrameStateInterface* component);
258 
259  protected:
260  std::vector<std::vector<DtFrameStateInterface*> > myFrameState;
261  };
262 
264  {
265  public:
268  {
269  }
270 
271  virtual ~DtExternalCurrentFrameState();
272 
273  bool isValid() const;
274 
276  template <typename T_Component>
277  const T_Component* getStateComponent(int index = 0) const;
278 
279  const DtFrameStateInterface* getStateComponent(DtStateComponent::StateComponentType, int index = 0) const;
280 
281  template <typename T_Component>
282  std::vector<const T_Component*> getStateComponentList() const
283  {
284  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
285  std::vector<const T_Component*> results;
286 
287  if (scType < myFrameState.size())
288  {
289  std::vector<const DtFrameStateInterface*>::const_iterator iter = myFrameState[scType].begin();
290  std::vector<const DtFrameStateInterface*>::const_iterator end = myFrameState[scType].end();
291  while (iter != end)
292  {
293  results.push_back(dynamic_cast<const T_Component*>(*iter));
294  ++iter;
295  }
296  }
297 
298  return results;
299  }
300 
301  void addStateComponent(const DtFrameStateInterface* comp);
302 
303  bool hasStateComponentType(DtStateComponent::StateComponentType scType) const;
304 
305  const DtString& markingText() const;
306 
308  {
309  return myFrameState.size();
310  }
311 
312  bool advancedFrame() const;
313 
314  protected:
315  friend class DtStateData;
316 
319  void removeStateComponent(const DtFrameStateInterface* component);
320 
321  protected:
322  std::vector<std::vector<const DtFrameStateInterface*> > myFrameState;
323  };
324 
340  {
341  public:
342  typedef unsigned long long SimStateID;
344  {
347  PublishComponentsOnly
348  };
349 
350  public:
351 
353  DtStateData(SimStateID, Legion::SimulationDatabase*, DtStateDataManager*);
354  DtStateData(SimStateID, makVrf::UInt64, Legion::SimulationDatabase*, DtStateDataManager*);
355 
357  virtual ~DtStateData();
358 
360  virtual void invalidate();
361  virtual bool isValid() const;
362  virtual bool isWritable() const;
363 
364  template <typename T_Component>
366  {
367  if (myWriteStateInstance.isValid())
368  {
369  return myWriteStateInstance.typeExtensionCount<T_Component>();
370  }
371  else
372  {
373  return getCurrentFrameNumberOfLegionComponents<T_Component>();
374  }
375  }
376 
377  template <typename T_Component>
379  {
380  if (myReadStateInstance && myReadStateInstance->isValid())
381  {
382  return myReadStateInstance->typeExtensionCount<T_Component>();
383  }
384  else
385  {
386  return 0;
387  }
388  }
389 
390  template <typename T_Component>
391  unsigned int componentCount() const
392  {
393  if (myWriteStateInstance.isValid())
394  {
395  return myWriteStateInstance.typeExtensionCount<T_Component>();
396  }
397  else if (myReadStateInstance && myReadStateInstance->isValid())
398  {
399  return myReadStateInstance->typeExtensionCount<T_Component>();
400  }
401 
402  return 0;
403  }
404 
405  template <typename T_Component>
406  T_Component findNextFrameLegionComponent(int index = 0)
407  {
408  if (myWriteStateInstance.isValid())
409  {
410  return myWriteStateInstance.findTypeExtension<T_Component>(std::max(0, index));
411  }
412  else
413  {
414  return findCurrentFrameLegionComponent<T_Component>(index);
415  }
416  }
417 
418  template <typename T_Component>
419  T_Component findCurrentFrameLegionComponent(int index = 0) const
420  {
421  if (myReadStateInstance && myReadStateInstance->isValid())
422  {
423  if (T_Component::isType(myReadStateInstance->instanceHandle()))
424  {
425  return T_Component(myReadStateInstance->instanceHandle());
426  }
427 
428  return myReadStateInstance->findTypeExtension<T_Component>(std::max(0, index));
429  }
430  else
431  {
432  return T_Component();
433  }
434  }
435 
436  bool advancedFrame() const
437  {
438  return myAdvancedFrame;
439  }
440 
441  bool advancingFrame() const
442  {
443  return myAdvancingFrame;
444  }
445 
447  {
448  return &myNextFrameState;
449  }
450 
452  {
453  return &myCurrentFrameState;
454  }
455 
457 
459  template <typename T_Component>
460  T_Component* addStateComponent(bool checkWritable = false, bool isRemote = false)
461  {
462  return myNextFrameState.addStateComponent<T_Component>(checkWritable, isRemote);
463  }
464 
465  template <typename T_Component>
466  bool isWritable()
467  {
468  return myNextFrameState.isWritable<T_Component>();
469  }
470 
472  {
473  if (myDatabase && myWriteStateInstance.isValid())
474  {
475  destroyInstance(myWriteStateInstance);
476  myWriteStateInstance = Legion::WriteStateInstance();
477  delete myReadStateInstance;
478  myReadStateInstance = nullptr;
479  }
480  }
481 
482  void destroyInstance(const Legion::WriteStateInstance& wsi)
483  {
484  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
485  database()->destroyInstance(wsi);
486  }
487 
489  virtual void createAndInitializeMainInstance();
490 
491  template <typename T_Component>
492  T_Component createMainInstance()
493  {
494  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
495  myWriteStateInstance = myDatabase->createInstance<T_Component>();
496  lock.release();
497 
498  return T_Component(myWriteStateInstance.instanceHandle());
499  }
500 
501  template <typename T_Component>
503  {
504  if (!myWriteStateInstance.isValid())
505  {
506  throw DtUnknownStateComponent("Cannot create a write Legion component on this object.");
507  }
508  else if (myDatabase)
509  {
510  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
511  T_Component comp = myDatabase->createInstance<T_Component>();
512  lock.release();
513 
514  return comp;
515  }
516 
517  return T_Component();
518  }
519 
520  template <typename T_Component>
521  T_Component createInstance()
522  {
523  if (!myWriteStateInstance.isValid())
524  {
525  throw DtUnknownStateComponent("Cannot create a write Legion component on this object.");
526  }
527  else if (myDatabase)
528  {
529  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
530  T_Component comp = myDatabase->createInstance<T_Component>();
531  lock.release();
532 
533  myWriteStateInstance.addExtension(comp);
534 
535  return comp;
536  }
537 
538  return T_Component();
539  }
540 
541  template <typename T_Component>
543  {
544  if (T_Component::ComponentType() < myStateComponents.size())
545  {
546  if (index < myStateComponents[T_Component::ComponentType()].size())
547  {
548  return myStateComponents[T_Component::ComponentType()][index];
549  }
550  }
551 
552  return 0;
553  }
554 
555  template <typename T_Component>
556  std::vector<T_Component*> getNextFrameStateComponentList() const
557  {
558  return myNextFrameState.getStateComponentList<T_Component>();
559  }
560 
561  template <typename T_Component>
562  std::vector<const T_Component*> getCurrentFrameStateComponentList() const
563  {
564  return myCurrentFrameState.getStateComponentList<T_Component>();
565  }
566 
567  template <typename T_Component>
568  bool hasStateComponent(bool checkWritable = false)
569  {
570  try
571  {
572  if (nextFrameState()->hasStateComponent<T_Component>())
573  {
574  if (checkWritable)
575  {
576  return (nextFrameStateComponent<T_Component>()->isWritable());
577  }
578 
579  return true;
580  }
581  else
582  {
583  return currentFrameState()->hasStateComponent<T_Component>();
584  }
585  }
586  catch(...)
587  {
588  return false;
589  }
590 
591  return false;
592  }
593 
594  template <typename T_Component>
595  const bool hasStateComponent() const
596  {
597  if (currentFrameState()->hasStateComponent<T_Component>())
598  {
599  return (dynamic_cast<const T_Component*>(currentFrameState()->getStateComponent<T_Component>()) != nullptr);
600  }
601 
602  return false;
603  }
604 
605  template <typename T_Component>
606  T_Component* nextFrameStateComponent()
607  {
608  T_Component* comp = nextFrameState()->getStateComponent<T_Component>(0);
609  if (comp && comp->isWritable())
610  {
611  return comp;
612  }
613  else
614  {
615  throw DtUnknownStateComponent("This object cannot have state written to it.");
616  }
617  }
618 
619  template <typename T_Component>
620  const T_Component* currentFrameStateComponent() const
621  {
622  return currentFrameState()->getStateComponent<T_Component>(0);
623  }
624 
627  virtual const DtFrameStateInterface* currentFrameStateFor(const DtFrameStateInterface*) const;
628 
629  void removeComponent(Legion::WriteStateInstance& set);
630 
632  bool frozen() const;
633 
634  const DtUUID& uuid() const;
635  void setUUID(const DtUUID&);
636 
637  void setGlobalId(const DtString& s);
638  const DtString& globalId() const;
639 
640  void setMarkingText(const DtString& name);
641  const DtString& markingText() const;
642 
643  const DtString parentGlobalId() const;
644  DtString parentGlobalId();
645 
646  const DtUUID& nextFrameHostId() const;
647  const DtUUID& currentFrameHostId() const;
648 
649  bool isClutterEntity() const;
650 
652  void setEntityType(const DtObjectType& type);
653  void setObjectType(const DtObjectType& type) { setEntityType(type); };
654 
655  DtEntityType entityType() const { return DtEntityType(objectType()); };
656  DtObjectType objectType() const;
657 
658  void setEntityId(const DtEntityIdentifier& s);
659  DtEntityIdentifier entityId() const;
660 
662  virtual void setAwaitingTransfer(bool);
663  bool awaitingTransfer() const
664  {
665  return myAwaitingTransfer;
666  }
667 
669  virtual void initializeParameterData(const DtVrfObjectParameters*);
670 
672  virtual bool createPublicData(const DtVrfObjectParameters*, bool isReflectedObject, const DtEntityType& et);
673 
674  SimStateID id() const
675  {
676  return mySimStateID;
677  }
678 
679  template <typename T_Class>
680  void removeInstanceUpdatedCallback(Legion::InstanceHandle instanceHandle, unsigned int callbackHandle);
681  template <typename T_Class>
682  unsigned int addInstanceUpdatedCallback(DtInstanceUpdatedCallback callback, Legion::InstanceHandle instanceHandle,
683  const std::vector<Legion::AttributeIndex>& attributeIndexFilter = std::vector<Legion::AttributeIndex>());
684 
685  virtual void advanceFrame();
686 
688  virtual void takeControlOfComponent(DtStateComponent*);
689 
691  virtual void setCoordinateSystem(const Coordinate_System*);
692 
693  void setIsLocal(bool b);
694  bool isLocal() const;
695 
697  {
698  return myPublishFlag;
699  }
700 
701  bool isPublishedOnNetwork() const
702  {
703  return ((myPublishFlag == PublishAll) || (myPublishFlag == PublishComponentsOnly));
704  }
705 
707  {
708  return myStateDataManager;
709  }
710 
712  {
713  return myStateDataManager;
714  }
715 
716  double absRealTime() const;
717 
719  {
720  return myCoordinateSystem;
721  }
722 
723  Legion::WriteStateInstance writeStateInstance()
724  {
725  return myWriteStateInstance;
726  }
727 
728  Legion::ReadStateInstance* readStateInstance() const
729  {
730  return myReadStateInstance;
731  }
732 
733  bool convertedToLocal() const
734  {
735  return myConvertedToLocal;
736  }
737 
739  UInt64 legionGlobalId() const;
740 
742  virtual void clearComponents();
743 
746  virtual DtLaserDesignatorStateComponent* addLaserDesignator(bool isRemote = false);
747  virtual void removeLaserDesignator(DtLaserDesignatorStateComponent*);
748 
749  virtual DtTaskVisualizationStateComponent* lineTaskVisualization(const DtString& visualName, const DtString& component);
750  virtual DtTaskVisualizationStateComponent* pointTaskVisualization(const DtString& visualName, const DtString& component);
751  virtual DtTaskVisualizationStateComponent* areaTaskVisualization(const DtString& visualName, const DtString& component);
752  virtual DtTaskVisualizationStateComponent* textTaskVisualization(const DtString& visualName, const DtString& component);
753  virtual void removeTaskVisualization(DtTaskVisualizationStateComponent*);
754 
755  virtual DtEmitterSystemStateComponent* addEmitterSystem(bool isRemote = false);
756  virtual void removeEmitterSystem(DtEmitterSystemStateComponent*);
757 
758  virtual DtActiveSonarStateComponent* addActiveSonarSystem(bool isRemote = false);
759  virtual void removeActiveSonarSystem(DtActiveSonarStateComponent*);
760 
761  virtual DtRadioTransmitterStateComponent* addRadioTransmitter(bool isRemote = false);
762  virtual void removeRadioTransmitter(DtRadioTransmitterStateComponent*);
763 
764  virtual DtNavAidRadioTransmitterStateComponent* addNavAidRadioTransmitter(bool isRemote = false);
765  virtual void removeNavAidRadioTransmitter(DtNavAidRadioTransmitterStateComponent*);
766 
767  virtual DtRadioReceiverStateComponent* addRadioReceiver(bool isRemote = false);
768  virtual void removeRadioReceiver(DtRadioReceiverStateComponent*);
769 
771  virtual DtIffStateComponent* getOrCreateIffSystem(bool isRemote = false);
772  virtual void removeIffSystem();
773 
775  virtual DtUnderwaterAcousticsStateComponent* getOrCreateUnderwaterAcousticsSystem(bool isRemote = false);
776  virtual void removeUnderwaterAcousticsSystem();
777 
778  virtual void removeStateComponent(DtFrameStateInterface*);
780 
781  Legion::SimulationDatabase* database()
782  {
783  return myDatabase;
784  }
785 
788  virtual void convertToRemote();
789 
791  virtual void convertToLocal();
792 
795  virtual int indexOfComponent(const DtFrameStateInterface*) const;
796 
798  virtual UInt64 instanceHandle(const DtFrameStateInterface*) const;
799 
801  virtual void shuttingDown();
802 
805  virtual void deletingComponent(DtStateComponent*);
806 
812  static void addDefaultPublicDataFor(const std::string& type, const std::string& componentCreator);
813  static void removeDefaultPublicDataFor(const std::string& type, const std::string& componentCreator);
814  static std::set<std::string> defaultPublicDataFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& parameterType);
816 
818  static void addPublicDataFor(const std::string& type, const std::string& componentCreator);
819  static void removePublicDataFor(const std::string& type, const std::string& componentCreator);
820  static std::set<std::string> additionalPublicDataFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& parameterType);
822 
823 
826  static void setDefaultMainComponentFor(const std::string& type, const std::string& defaultPublicData);
827  static std::string defaultMainComponentFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& type);
829 
832  virtual void aboutToBeDeleted();
833 
834  virtual void setPublishingOnLegionNetwork(bool b);
836  {
837  return myPublishingOnLegionNetwork;
838  }
839 
840  protected:
841  virtual const DtSimulatedObjectStateComponent* currentFrameSimulatedObjectStateComponent() const;
842  virtual const DtLocationStateComponent* currentFrameLocationStateComponent() const;
843  virtual DtSimulatedObjectStateComponent* nextFrameSimulatedObjectStateComponent();
844 
846  virtual DtStateData* currentFrameHostStateData() const;
847 
849  virtual bool createMainData(const DtVrfObjectParameters* params, const DtEntityType& et);
850 
851  virtual void hostChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
852  virtual void setupStateComponent(DtStateComponent*, const DtVrfObjectParameters* params = 0);
853  virtual void subordinatesChanged(const std::vector<DtUUID>& oldSubordinates, const std::vector<DtUUID>& newSubordinates);
854 
855  friend class DtStateDataManager;
856 
859  {
860  myPublishFlag = b;
861  }
862 
864  virtual std::string defaultParameterTypeForEntityType(const DtEntityType&) const;
865 
868  virtual void completeRemoteConversion();
869 
870  virtual void hostWasDeleted();
871 
872  protected:
874 
875  virtual void removeStateComponent(DtStateComponent::StateComponentType t);
876  virtual void uuidChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
877  virtual void markingTextChanged(const DtString& oldUUID, const DtString& newUUID);
878 
879  public:
881  mutable boost::signals2::signal<void (const DtStateData*)> signal_firstFrameAdvance;
882 
883  boost::signals2::signal<void(const DtUUID&, const DtUUID&, SimStateID)> signal_uuidChanged;
884  boost::signals2::signal<void(const DtString&, const DtString&, const DtUUID&, SimStateID)> signal_markingTextChanged;
885 
887  boost::signals2::signal<void (const DtStateData*, const DtUUID& oldUUID, const DtUUID& newUUID)> signal_hostChanged;
888 
889  mutable boost::signals2::signal<void (const DtStateData*)> signal_stateDataToBeDestroyed;
890  boost::signals2::signal<void (SimStateID)> signal_preFrameAdvanced;
891 
893  mutable boost::signals2::signal<void (const DtStateData*)> signal_frameAdvanced;
894 
896  boost::signals2::signal<void (const DtStateData*)> signal_modified;
897 
898  boost::signals2::signal<void (DtStateData*)> signal_convertingToRemote;
899  boost::signals2::signal<void (DtStateData*)> signal_convertedToRemote;
900 
901  boost::signals2::signal<void (DtStateData*)> signal_convertingToLocal;
902  boost::signals2::signal<void (DtStateData*)> signal_convertedToLocal;
903 
904  boost::signals2::signal<void (const DtStateData*, const std::vector<DtUUID>& added, const std::vector<DtUUID>& removed)> signal_subordinatesChanged;
905 
906  protected:
912 
914  Legion::SimulationDatabase* myDatabase;
915 
917  Legion::WriteStateInstance myWriteStateInstance;
918  Legion::ReadStateInstance* myReadStateInstance;
919 
921 
924 
926 
928 
929  std::vector<std::vector<DtStateComponent*> > myStateComponents;
930  std::vector<std::vector<DtStateComponent*> > myCreatedStateComponents;
931  std::set<DtFrameStateInterface*> myRemoveStateComponents;
932 
936 
938  std::atomic<unsigned int> myComponentNumber;
939 
940  boost::signals2::scoped_connection mySubordinatesChangedConnection;
941  boost::signals2::scoped_connection myHostChangedConnection;
942  boost::signals2::scoped_connection myUUIDChangedConnection;
943  boost::signals2::scoped_connection myMarkingTextChangedConnection;
944  mutable boost::signals2::scoped_connection myHostWasDeletedConnection;
945 
949  typedef std::map<std::string, std::set<std::string> > PublicData;
952 
953  typedef std::map<std::string, std::string> DefaultMainComponentMap;
955  bool myCleared;
956 
960 
963  const DtLocationStateComponent* myNextFrameLocationStateComponent = nullptr;
966  mutable tbb::spin_rw_mutex myCurrentFrameHostStateDataMutex;
967  static tbb::mutex theCreateInstanceMutex;
968 
969  bool myAdvancingFrame = false;
970  bool myConvertedToLocal = false;
971  };
972 }
973 
974 #include <vrfStateData/stateData.inl>
bool isWritable()
Definition: stateData.h:205
UUID is a unique ID wrapper class.
Definition: uuid.h:59
bool myAdvancedFrame
Definition: stateData.h:933
Instances of DtVrfObjectParameters are the readable/writeable objects that contain the information ne...
Definition: vrfObjectParameters.h:63
boost::signals2::scoped_connection myMarkingTextChangedConnection
Definition: stateData.h:943
T_Component * nextFrameStateComponent()
Definition: stateData.h:606
std::vector< T_Component * > getNextFrameStateComponentList() const
Definition: stateData.h:556
const DtSimulatedObjectStateComponent * myCurrentFrameSimulatedObjectStateComponent
Definition: stateData.h:961
unsigned long long SimStateID
Definition: stateDataTypes.h:16
bool advancingFrame() const
Definition: stateData.h:441
DtExternalCurrentFrameState(DtStateData *sd)
Definition: stateData.h:266
Definition: stateDataTypes.h:23
unsigned long long SimStateID
Definition: stateData.h:342
std::vector< const T_Component * > getStateComponentList() const
Definition: stateData.h:282
const bool hasStateComponent() const
Definition: stateData.h:595
boost::signals2::scoped_connection mySubordinatesChangedConnection
Definition: stateData.h:940
boost::signals2::signal< void(SimStateID)> signal_preFrameAdvanced
Definition: stateData.h:890
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:214
int mySessionId
Definition: stateData.h:927
The DtLocationStateComponent interface contains the interface that all DtLocationStateComponents can ...
Definition: locationStateComponent.h:25
DtEntityType entityType() const
Definition: stateData.h:655
int getCurrentFrameNumberOfLegionComponents() const
Definition: stateData.h:378
bool convertedToLocal() const
Definition: stateData.h:733
const Coordinate_System * myCoordinateSystem
Definition: stateData.h:925
unsigned int StateComponentType
Definition: stateComponent.h:55
std::vector< std::vector< DtStateComponent * > > myStateComponents
Definition: stateData.h:929
int numberOfFrameStates() const
Definition: stateData.h:307
boost::signals2::signal< void(const DtStateData *)> signal_modified
Signal sent if this state had modified components.
Definition: stateData.h:896
PublishFlag myPublishFlag
Simulated locally vs. remote representation.
Definition: stateData.h:923
The DtSimulatedObjectStateComponent is an interface that all main components (those that are consider...
Definition: simulatedObjectStateComponent.h:21
T_Component createUnattachedInstance()
Definition: stateData.h:502
boost::signals2::signal< void(const DtString &, const DtString &, const DtUUID &, SimStateID)> signal_markingTextChanged
Definition: stateData.h:884
static tbb::mutex theCreateInstanceMutex
Definition: stateData.h:967
static PublicData theDefaultPublicData
Definition: stateData.h:950
Definition: stateData.h:345
Legion::SimulationDatabase * database()
Definition: stateData.h:781
PublishFlag publishFlag() const
Definition: stateData.h:696
static DefaultMainComponentMap theDefaultMainComponentMap
Definition: stateData.h:954
voidpf void uLong size
Definition: ioapi.h:39
const DtStateDataManager * stateDataManager() const
Definition: stateData.h:711
const DtFrameStateInterface * getStateComponent(DtStateComponent::StateComponentType scType, int index=0) const
Definition: stateData.h:174
DtFrameStateInterface * getStateComponent(DtStateComponent::StateComponentType scType, int index=0)
Definition: stateData.h:187
void setPublishFlag(PublishFlag b)
Only called during construction.
Definition: stateData.h:858
Legion::SimulationDatabase * myDatabase
Definition: stateData.h:914
bool hasStateComponent(bool checkWritable=false)
Definition: stateData.h:568
Definition: stateData.h:116
boost::signals2::signal< void(const DtStateData *)> signal_frameAdvanced
Signal sent regardless of whether or not this state had any modified components.
Definition: stateData.h:893
Contains the DtUUID class declaration.
DT_DLL_vrfmodel makVrf::DtDynamicTerrainStateComponent * createStateComponent(DtLocalObject *localObject)
Creates a new state component on the localObject and returns a pointer to it. Note that the state com...
boost::signals2::signal< void(const DtUUID &, const DtUUID &, SimStateID)> signal_uuidChanged
Definition: stateData.h:883
PublishFlag
Definition: stateData.h:343
Legion::ReadStateInstance * myReadStateInstance
Definition: stateData.h:918
boost::signals2::signal< void(DtStateData *)> signal_convertedToLocal
Definition: stateData.h:902
unsigned int componentCount() const
Definition: stateData.h:391
std::vector< std::vector< DtStateComponent * > > myCreatedStateComponents
Definition: stateData.h:930
T_Component findNextFrameLegionComponent(int index=0)
Definition: stateData.h:406
SimStateID id() const
Definition: stateData.h:674
const DtVrfObjectParameters * myParameters
Definition: stateData.h:957
T_Component createInstance()
Definition: stateData.h:521
Definition: stateData.h:346
T_Component findCurrentFrameLegionComponent(int index=0) const
Definition: stateData.h:419
void destroyInstance(const Legion::WriteStateInstance &wsi)
Definition: stateData.h:482
int getNextFrameNumberOfLegionComponents()
Definition: stateData.h:365
std::vector< const T_Component * > getCurrentFrameStateComponentList() const
Definition: stateData.h:562
static PublicData theAdditionalPublicData
Definition: stateData.h:951
Definition: objectType.h:27
boost::signals2::scoped_connection myHostChangedConnection
Definition: stateData.h:941
std::vector< T_Component * > getStateComponentList() const
Definition: stateData.h:155
boost::signals2::signal< void(const DtExternalFrameStateInterface *)> signal_externalFrameStateToBeDestroyed
Definition: stateData.h:100
DtStateComponent * getStateComponent(int index=0)
Definition: stateData.h:542
DtStateData * myCurrentFrameHostStateData
Definition: stateData.h:965
Definition: coordSystem.h:54
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
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:958
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
boost::signals2::signal< void(DtStateData *)> signal_convertedToRemote
Definition: stateData.h:899
DtExternalNextFrameState * nextFrameState()
Definition: stateData.h:446
Legion::WriteStateInstance myWriteStateInstance
The basic data. This is what all components are hung off of if they are STE compliant.
Definition: stateData.h:917
std::atomic< unsigned int > myComponentNumber
Definition: stateData.h:938
boost::signals2::signal< void(const DtStateData *, const DtUUID &oldUUID, const DtUUID &newUUID)> signal_hostChanged
Signal sent when the host has changed.
Definition: stateData.h:887
std::map< std::string, std::string > DefaultMainComponentMap
Definition: stateData.h:953
const Coordinate_System * coordinateSystem() const
Definition: stateData.h:718
DtExternalCurrentFrameState myCurrentFrameState
Definition: stateData.h:911
bool isWritable()
Definition: stateData.h:466
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:949
void destroyMainInstance()
Definition: stateData.h:471
unsigned long long UInt64
Definition: stateDataTypes.h:17
Legion::ReadStateInstance * readStateInstance() const
Definition: stateData.h:728
DtStateDataManager * myStateDataManager
Definition: stateData.h:913
bool myMainComponentOnLegion
Definition: stateData.h:959
Definition: stateData.h:263
UInt64 myLegionGlobalId
Definition: stateData.h:937
DtExternalNextFrameState(DtStateData *sd)
Definition: stateData.h:119
Legion::WriteStateInstance writeStateInstance()
Definition: stateData.h:723
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
bool advancedFrame() const
Definition: stateData.h:436
Definition: stateDataTypes.h:28
Definition: stateComponent.h:51
boost::signals2::scoped_connection myUUIDChangedConnection
Definition: stateData.h:942
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:962
const DtExternalCurrentFrameState * currentFrameState() const
Definition: stateData.h:451
std::set< DtFrameStateInterface * > myRemoveStateComponents
Definition: stateData.h:931
boost::signals2::scoped_connection myHostWasDeletedConnection
Definition: stateData.h:944
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:113
std::vector< std::vector< DtFrameStateInterface * > > myFrameState
Definition: stateData.h:260
Definition: stateData.h:73
boost::signals2::signal< void(const DtStateData *)> signal_stateDataToBeDestroyed
Definition: stateData.h:889
boost::signals2::signal< void(DtStateData *)> signal_convertingToRemote
Definition: stateData.h:898
bool myConvertToRemote
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: underwaterAcousticsStateComponent.h:106
bool publishingOnLegionNetwork() const
Definition: stateData.h:835
#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:663
bool myAwaitingTransfer
Definition: stateData.h:935
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:83
DtStateDataManager * stateDataManager()
Definition: stateData.h:706
void setObjectType(const DtObjectType &type)
Definition: stateData.h:653
const T_Component * getStateComponent(int index=0) const
The current state frame data.
Definition: stateData.h:140
bool myCleared
Definition: stateData.h:955
tbb::spin_rw_mutex myCurrentFrameHostStateDataMutex
Definition: stateData.h:966
DtExternalNextFrameState myNextFrameState
Even though this class contains the components, the frame classes will give access to those component...
Definition: stateData.h:910
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:107
DtSimulatedObjectStateComponent * myNextFrameSimulatedObjectStateComponent
Definition: stateData.h:964
boost::function< void(const std::vector< UInt32 > &)> DtInstanceUpdatedCallback
Definition: stateDataTypes.h:21
T_Component createMainInstance()
Definition: stateData.h:492
boost::signals2::signal< void(DtStateData *)> signal_convertingToLocal
Definition: stateData.h:901
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:291
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:460
bool hasStateComponent() const
Definition: stateData.h:85
bool isPublishedOnNetwork() const
Definition: stateData.h:701
SimStateID mySimStateID
Definition: stateData.h:920
std::vector< std::vector< const DtFrameStateInterface * > > myFrameState
Definition: stateData.h:322
const T_Component * currentFrameStateComponent() const
Definition: stateData.h:620
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73
int numberOfFrameStates() const
Definition: stateData.h:247
boost::signals2::signal< void(const DtStateData *)> signal_firstFrameAdvance
Signal sent on the first frame advance.
Definition: stateData.h:881

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)