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 
639  void setCheckForNameReservation(bool);
640  bool checkForNameReservation() const;
641 
642  void setGlobalId(const DtString& s);
643  const DtString& globalId() const;
644 
645  void setMarkingText(const DtString& name);
646  const DtString& markingText() const;
647 
648  const DtString parentGlobalId() const;
649  DtString parentGlobalId();
650 
651  const DtUUID& nextFrameHostId() const;
652  const DtUUID& currentFrameHostId() const;
653 
654  bool isClutterEntity() const;
655 
657  void setEntityType(const DtObjectType& type);
658  void setObjectType(const DtObjectType& type) { setEntityType(type); };
659 
660  DtEntityType entityType() const { return DtEntityType(objectType()); };
661  DtObjectType objectType() const;
662 
663  void setEntityId(const DtEntityIdentifier& s);
664  DtEntityIdentifier entityId() const;
665 
667  virtual void setAwaitingTransfer(bool);
668  bool awaitingTransfer() const
669  {
670  return myAwaitingTransfer;
671  }
672 
674  virtual void initializeParameterData(const DtVrfObjectParameters*);
675 
677  virtual bool createPublicData(const DtVrfObjectParameters*, bool isReflectedObject, const DtEntityType& et);
678 
679  SimStateID id() const
680  {
681  return mySimStateID;
682  }
683 
684  template <typename T_Class>
685  void removeInstanceUpdatedCallback(Legion::InstanceHandle instanceHandle, unsigned int callbackHandle);
686  template <typename T_Class>
687  unsigned int addInstanceUpdatedCallback(DtInstanceUpdatedCallback callback, Legion::InstanceHandle instanceHandle,
688  const std::vector<Legion::AttributeIndex>& attributeIndexFilter = std::vector<Legion::AttributeIndex>());
689 
690  virtual void advanceFrame();
691 
693  virtual void takeControlOfComponent(DtStateComponent*);
694 
696  virtual void setCoordinateSystem(const Coordinate_System*);
697 
698  void setIsLocal(bool b);
699  bool isLocal() const;
700 
702  {
703  return myPublishFlag;
704  }
705 
706  bool isPublishedOnNetwork() const
707  {
708  return ((myPublishFlag == PublishAll) || (myPublishFlag == PublishComponentsOnly));
709  }
710 
712  {
713  return myStateDataManager;
714  }
715 
717  {
718  return myStateDataManager;
719  }
720 
721  double absRealTime() const;
722 
724  {
725  return myCoordinateSystem;
726  }
727 
728  Legion::WriteStateInstance writeStateInstance()
729  {
730  return myWriteStateInstance;
731  }
732 
733  Legion::ReadStateInstance* readStateInstance() const
734  {
735  return myReadStateInstance;
736  }
737 
738  bool convertedToLocal() const
739  {
740  return myConvertedToLocal;
741  }
742 
744  UInt64 legionGlobalId() const;
745 
747  virtual void clearComponents();
748 
751  virtual DtLaserDesignatorStateComponent* addLaserDesignator(bool isRemote = false);
752  virtual void removeLaserDesignator(DtLaserDesignatorStateComponent*);
753 
754  virtual DtTaskVisualizationStateComponent* lineTaskVisualization(const DtString& visualName, const DtString& component);
755  virtual DtTaskVisualizationStateComponent* pointTaskVisualization(const DtString& visualName, const DtString& component);
756  virtual DtTaskVisualizationStateComponent* areaTaskVisualization(const DtString& visualName, const DtString& component);
757  virtual DtTaskVisualizationStateComponent* textTaskVisualization(const DtString& visualName, const DtString& component);
758  virtual void removeTaskVisualization(DtTaskVisualizationStateComponent*);
759 
760  virtual DtEmitterSystemStateComponent* addEmitterSystem(bool isRemote = false);
761  virtual void removeEmitterSystem(DtEmitterSystemStateComponent*);
762 
763  virtual DtActiveSonarStateComponent* addActiveSonarSystem(bool isRemote = false);
764  virtual void removeActiveSonarSystem(DtActiveSonarStateComponent*);
765 
766  virtual DtRadioTransmitterStateComponent* addRadioTransmitter(bool isRemote = false);
767  virtual void removeRadioTransmitter(DtRadioTransmitterStateComponent*);
768 
769  virtual DtNavAidRadioTransmitterStateComponent* addNavAidRadioTransmitter(bool isRemote = false);
770  virtual void removeNavAidRadioTransmitter(DtNavAidRadioTransmitterStateComponent*);
771 
772  virtual DtRadioReceiverStateComponent* addRadioReceiver(bool isRemote = false);
773  virtual void removeRadioReceiver(DtRadioReceiverStateComponent*);
774 
776  virtual DtIffStateComponent* getOrCreateIffSystem(bool isRemote = false);
777  virtual void removeIffSystem();
778 
780  virtual DtUnderwaterAcousticsStateComponent* getOrCreateUnderwaterAcousticsSystem(bool isRemote = false);
781  virtual void removeUnderwaterAcousticsSystem();
782 
783  virtual void removeStateComponent(DtFrameStateInterface*);
785 
786  Legion::SimulationDatabase* database()
787  {
788  return myDatabase;
789  }
790 
793  virtual void convertToRemote();
794 
796  virtual void convertToLocal();
797 
800  virtual int indexOfComponent(const DtFrameStateInterface*) const;
801 
803  virtual UInt64 instanceHandle(const DtFrameStateInterface*) const;
804 
806  virtual void shuttingDown();
807 
810  virtual void deletingComponent(DtStateComponent*);
811 
817  static void addDefaultPublicDataFor(const std::string& type, const std::string& componentCreator);
818  static void removeDefaultPublicDataFor(const std::string& type, const std::string& componentCreator);
819  static std::set<std::string> defaultPublicDataFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& parameterType);
821 
823  static void addPublicDataFor(const std::string& type, const std::string& componentCreator);
824  static void removePublicDataFor(const std::string& type, const std::string& componentCreator);
825  static std::set<std::string> additionalPublicDataFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& parameterType);
827 
828 
831  static void setDefaultMainComponentFor(const std::string& type, const std::string& defaultPublicData);
832  static std::string defaultMainComponentFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& type);
834 
837  virtual void aboutToBeDeleted();
838 
839  virtual void setPublishingOnLegionNetwork(bool b);
841  {
842  return myPublishingOnLegionNetwork;
843  }
844 
845  protected:
846  virtual const DtSimulatedObjectStateComponent* currentFrameSimulatedObjectStateComponent() const;
847  virtual const DtLocationStateComponent* currentFrameLocationStateComponent() const;
848  virtual DtSimulatedObjectStateComponent* nextFrameSimulatedObjectStateComponent();
849 
851  virtual DtStateData* currentFrameHostStateData() const;
852 
854  virtual bool createMainData(const DtVrfObjectParameters* params, const DtEntityType& et);
855 
856  virtual void hostChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
857  virtual void setupStateComponent(DtStateComponent*, const DtVrfObjectParameters* params = 0);
858  virtual void subordinatesChanged(const std::vector<DtUUID>& oldSubordinates, const std::vector<DtUUID>& newSubordinates);
859 
860  friend class DtStateDataManager;
861 
864  {
865  myPublishFlag = b;
866  }
867 
869  virtual std::string defaultParameterTypeForEntityType(const DtEntityType&) const;
870 
873  virtual void completeRemoteConversion();
874 
875  virtual void hostWasDeleted();
876 
877  protected:
879 
880  virtual void removeStateComponent(DtStateComponent::StateComponentType t);
881  virtual void uuidChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
882  virtual void markingTextChanged(const DtString& oldUUID, const DtString& newUUID);
883 
884  public:
886  mutable boost::signals2::signal<void (const DtStateData*)> signal_firstFrameAdvance;
887 
888  boost::signals2::signal<void(const DtUUID&, const DtUUID&, SimStateID)> signal_uuidChanged;
889  boost::signals2::signal<void(const DtString&, const DtString&, const DtUUID&, SimStateID)> signal_markingTextChanged;
890 
892  boost::signals2::signal<void (const DtStateData*, const DtUUID& oldUUID, const DtUUID& newUUID)> signal_hostChanged;
893 
894  mutable boost::signals2::signal<void (const DtStateData*)> signal_stateDataToBeDestroyed;
895  boost::signals2::signal<void (SimStateID)> signal_preFrameAdvanced;
896 
898  mutable boost::signals2::signal<void (const DtStateData*)> signal_frameAdvanced;
899 
901  boost::signals2::signal<void (const DtStateData*)> signal_modified;
902 
903  boost::signals2::signal<void (DtStateData*)> signal_convertingToRemote;
904  boost::signals2::signal<void (DtStateData*)> signal_convertedToRemote;
905 
906  boost::signals2::signal<void (DtStateData*)> signal_convertingToLocal;
907  boost::signals2::signal<void (DtStateData*)> signal_convertedToLocal;
908 
909  boost::signals2::signal<void (const DtStateData*, const std::vector<DtUUID>& added, const std::vector<DtUUID>& removed)> signal_subordinatesChanged;
910 
911  protected:
917 
919  Legion::SimulationDatabase* myDatabase;
920 
922  Legion::WriteStateInstance myWriteStateInstance;
923  Legion::ReadStateInstance* myReadStateInstance;
924 
926 
929 
931 
933 
934  std::vector<std::vector<DtStateComponent*> > myStateComponents;
935  std::vector<std::vector<DtStateComponent*> > myCreatedStateComponents;
936  std::set<DtFrameStateInterface*> myRemoveStateComponents;
937 
941 
943  std::atomic<unsigned int> myComponentNumber;
944 
945  boost::signals2::scoped_connection mySubordinatesChangedConnection;
946  boost::signals2::scoped_connection myHostChangedConnection;
947  boost::signals2::scoped_connection myUUIDChangedConnection;
948  boost::signals2::scoped_connection myMarkingTextChangedConnection;
949  mutable boost::signals2::scoped_connection myHostWasDeletedConnection;
950 
954  typedef std::map<std::string, std::set<std::string> > PublicData;
957 
958  typedef std::map<std::string, std::string> DefaultMainComponentMap;
960  bool myCleared;
961 
965 
968  const DtLocationStateComponent* myNextFrameLocationStateComponent = nullptr;
971  mutable tbb::spin_rw_mutex myCurrentFrameHostStateDataMutex;
972  static tbb::mutex theCreateInstanceMutex;
973 
974  bool myAdvancingFrame = false;
975  bool myConvertedToLocal = false;
976  };
977 }
978 
979 #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:938
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:948
T_Component * nextFrameStateComponent()
Definition: stateData.h:606
std::vector< T_Component * > getNextFrameStateComponentList() const
Definition: stateData.h:556
const DtSimulatedObjectStateComponent * myCurrentFrameSimulatedObjectStateComponent
Definition: stateData.h:966
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:945
boost::signals2::signal< void(SimStateID)> signal_preFrameAdvanced
Definition: stateData.h:895
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:932
The DtLocationStateComponent interface contains the interface that all DtLocationStateComponents can ...
Definition: locationStateComponent.h:25
DtEntityType entityType() const
Definition: stateData.h:660
int getCurrentFrameNumberOfLegionComponents() const
Definition: stateData.h:378
bool convertedToLocal() const
Definition: stateData.h:738
const Coordinate_System * myCoordinateSystem
Definition: stateData.h:930
unsigned int StateComponentType
Definition: stateComponent.h:55
std::vector< std::vector< DtStateComponent * > > myStateComponents
Definition: stateData.h:934
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:901
PublishFlag myPublishFlag
Simulated locally vs. remote representation.
Definition: stateData.h:928
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:889
static tbb::mutex theCreateInstanceMutex
Definition: stateData.h:972
static PublicData theDefaultPublicData
Definition: stateData.h:955
Definition: stateData.h:345
Legion::SimulationDatabase * database()
Definition: stateData.h:786
PublishFlag publishFlag() const
Definition: stateData.h:701
static DefaultMainComponentMap theDefaultMainComponentMap
Definition: stateData.h:959
voidpf void uLong size
Definition: ioapi.h:39
const DtStateDataManager * stateDataManager() const
Definition: stateData.h:716
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:863
Legion::SimulationDatabase * myDatabase
Definition: stateData.h:919
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:898
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:888
PublishFlag
Definition: stateData.h:343
Legion::ReadStateInstance * myReadStateInstance
Definition: stateData.h:923
boost::signals2::signal< void(DtStateData *)> signal_convertedToLocal
Definition: stateData.h:907
unsigned int componentCount() const
Definition: stateData.h:391
std::vector< std::vector< DtStateComponent * > > myCreatedStateComponents
Definition: stateData.h:935
T_Component findNextFrameLegionComponent(int index=0)
Definition: stateData.h:406
SimStateID id() const
Definition: stateData.h:679
const DtVrfObjectParameters * myParameters
Definition: stateData.h:962
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:956
boost::signals2::scoped_connection myHostChangedConnection
Definition: stateData.h:946
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:970
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:963
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:904
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:922
std::atomic< unsigned int > myComponentNumber
Definition: stateData.h:943
boost::signals2::signal< void(const DtStateData *, const DtUUID &oldUUID, const DtUUID &newUUID)> signal_hostChanged
Signal sent when the host has changed.
Definition: stateData.h:892
std::map< std::string, std::string > DefaultMainComponentMap
Definition: stateData.h:958
const Coordinate_System * coordinateSystem() const
Definition: stateData.h:723
DtExternalCurrentFrameState myCurrentFrameState
Definition: stateData.h:916
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:954
void destroyMainInstance()
Definition: stateData.h:471
unsigned long long UInt64
Definition: stateDataTypes.h:17
Legion::ReadStateInstance * readStateInstance() const
Definition: stateData.h:733
DtStateDataManager * myStateDataManager
Definition: stateData.h:918
bool myMainComponentOnLegion
Definition: stateData.h:964
Definition: stateData.h:263
UInt64 myLegionGlobalId
Definition: stateData.h:942
DtExternalNextFrameState(DtStateData *sd)
Definition: stateData.h:119
Legion::WriteStateInstance writeStateInstance()
Definition: stateData.h:728
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:947
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:967
const DtExternalCurrentFrameState * currentFrameState() const
Definition: stateData.h:451
std::set< DtFrameStateInterface * > myRemoveStateComponents
Definition: stateData.h:936
boost::signals2::scoped_connection myHostWasDeletedConnection
Definition: stateData.h:949
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:894
boost::signals2::signal< void(DtStateData *)> signal_convertingToRemote
Definition: stateData.h:903
bool myConvertToRemote
Definition: stateData.h:939
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:840
#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:668
bool myAwaitingTransfer
Definition: stateData.h:940
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:711
void setObjectType(const DtObjectType &type)
Definition: stateData.h:658
const T_Component * getStateComponent(int index=0) const
The current state frame data.
Definition: stateData.h:140
bool myCleared
Definition: stateData.h:960
tbb::spin_rw_mutex myCurrentFrameHostStateDataMutex
Definition: stateData.h:971
DtExternalNextFrameState myNextFrameState
Even though this class contains the components, the frame classes will give access to those component...
Definition: stateData.h:915
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:969
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:906
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:706
SimStateID mySimStateID
Definition: stateData.h:925
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:886

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)