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 
25 #include <vrfutil/rwUUID.h>
26 #include <legionDataStore/simulationDatabase.h>
27 #include <legionDataStore/writeStateInstance.h>
28 #include <legionDataStore/readStateInstance.h>
29 #include "legionDataStore/view.h"
30 
31 #include <vlutil/vlString.h>
32 #include <vlpi/disEnums.h>
33 #include <tbb/spin_rw_mutex.h>
34 #include <tbb/spin_mutex.h>
35 #include <tbb/mutex.h>
36 #include <set>
37 #include <boost/signals2.hpp>
38 
39 namespace LOM
40 {
41  class WriteEntityRepository;
42  class ReadEntityRepository;
43 }
44 
45 namespace Legion
46 {
47  class SimulationDatabase;
48  class WriteStateInstance;
49 }
50 
51 class DtAppearance;
53 
54 namespace makVrf
55 {
56  class DtStateDataManager;
57  class DtLaserDesignatorStateComponent;
58  class DtIffStateComponent;
59  class DtActiveSonarStateComponent;
60  class DtTaskVisualizationStateComponent;
61  class DtRadioTransmitterStateComponent;
62  class DtNavAidRadioTransmitterStateComponent;
63  class DtUnderwaterAcousticsStateComponent;
64  class DtEmitterSystemStateComponent;
65  class DtRadioReceiverStateComponent;
66  class DtSimulatedObjectStateComponent;
67  class DtLocationStateComponent;
68  class DtAisDataStateComponent;
69  class DtAircraftLightingStateComponent;
70  class DtGroundVehicleLightingStateComponent;
71  class DtSimpleSimulatedObjectStateComponent;
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  template <typename T_Component>
96  const T_Component* getStateComponent() const
97  {
98  return dynamic_cast<const T_Component*>(getStateComponent(T_Component::ComponentType()));
99  }
100 
101  virtual int numComponents(DtStateComponent::StateComponentType) const = 0;
102 
103  template <typename T_Component>
104  std::vector<const T_Component*> getStateComponentList() const
105  {
106  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
107  std::vector<const T_Component*> results;
108  int iLimit = numComponents(scType);
109  int i;
110  for (i = 0; i < iLimit; i++)
111  {
112  results.push_back(dynamic_cast<const T_Component*>(getStateComponent(scType, i)));
113  }
114 
115  return results;
116  }
117 
118  virtual bool hasStateComponentType(DtStateComponent::StateComponentType) const = 0;
119  virtual const DtFrameStateInterface* getStateComponent(DtStateComponent::StateComponentType, int index = 0) const = 0;
120  virtual void aboutToBeDeleted();
121 
122  unsigned long long legionGlobalId() const;
123  mutable boost::signals2::signal<void (const DtExternalFrameStateInterface*)> signal_externalFrameStateToBeDestroyed;
124 
125  protected:
127 
128  virtual void removeStateComponent(const DtFrameStateInterface* fc = nullptr) = 0;
129  virtual void addStateComponent(const DtFrameStateInterface* comp) = 0;
130  virtual void addStateComponent(DtFrameStateInterface*) { throw DtUnimplementedMethod("The addStateComponent() method is not implemented for this class."); };
131 
132  virtual const DtString& markingText() const { throw DtUnimplementedMethod("The const DtString markingText() const is unimplmented for this class."); };
133 
134  protected:
135  DtStateData* myStateData;
136  bool myCleared;
137  };
138 
140  {
141  public:
144  {
145  }
146 
147  virtual ~DtExternalNextFrameState() override;
148 
149  virtual void addStateComponent(DtFrameStateInterface*) override;
150 
151  DtFrameStateInterface* addStateComponent(DtStateComponent::StateComponentType type, const DtVrfObjectParameters* = nullptr);
152 
154  template <typename T_Component>
155  T_Component* addStateComponent(bool checkWritable = false, bool isRemote = false);
156 
157  std::set<int> modifiedStateComponentTypes() const;
158  bool isModified() const;
159 
161  void nextFrameRemoveStateComponent(const DtFrameStateInterface* component);
162 
163  template <typename T_Component>
164  void removeStateComponents();
165 
166  virtual int numComponents(DtStateComponent::StateComponentType scType) const override
167  {
168  if (scType < myFrameState.size())
169  {
170  return myFrameState[scType].size();
171  }
172 
173  return 0;
174  }
175 
177  template <typename T_Component>
178  const T_Component* getStateComponent(int index = 0) const
179  {
180  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
181 
182  const T_Component* comp = dynamic_cast<const T_Component*>(getStateComponent(scType, index));
183 
184  if (!comp)
185  {
186  throw DtUnknownStateComponent(T_Component::StringType());
187  }
188 
189  return comp;
190  }
191 
192  template <typename T_Component>
193  std::vector<T_Component*> getStateComponentList() const
194  {
195  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
196  std::vector<T_Component*> results;
197 
198  if (scType < myFrameState.size())
199  {
200  std::vector<DtFrameStateInterface*>::const_iterator iter = myFrameState[scType].begin();
201  std::vector<DtFrameStateInterface*>::const_iterator end = myFrameState[scType].end();
202  while (iter != end)
203  {
204  results.push_back(dynamic_cast<T_Component*>(*iter));
205  ++iter;
206  }
207  }
208 
209  return results;
210  }
211 
212  virtual const DtFrameStateInterface* getStateComponent(DtStateComponent::StateComponentType scType, int index = 0) const override
213  {
214  if (scType < myFrameState.size())
215  {
216  if (index < myFrameState[scType].size())
217  {
218  return myFrameState[scType][index];
219  }
220  }
221 
222  return nullptr;
223  }
224 
226  {
227  if (scType < myFrameState.size())
228  {
229  if (index < myFrameState[scType].size())
230  {
231  return myFrameState[scType][index];
232  }
233  }
234 
235  return nullptr;
236  }
237 
238  virtual bool hasStateComponentType(DtStateComponent::StateComponentType scType) const override;
239  virtual void addStateComponent(const DtFrameStateInterface* comp) override;
240 
241  template <typename T_Component>
242  bool isWritable()
243  {
244  T_Component* comp = getStateComponent<T_Component>(0, false);
245 
246  return (comp && comp->isWritable());
247  }
248 
250  template <typename T_Component>
251  T_Component* getStateComponent(int index = 0, bool checkWritable = true)
252  {
253  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
254 
255  if (scType < myFrameState.size())
256  {
257  if (index < myFrameState[scType].size())
258  {
259  DtFrameStateInterface* sc = myFrameState[scType][index];
260 
261  if (sc)
262  {
263  T_Component* comp = dynamic_cast<T_Component*>(sc);
264 
265  if (comp && (!checkWritable || comp->isWritable()))
266  {
267  return comp;
268  }
269  else
270  {
271  throw DtUnknownStateComponent("This object cannot have state written to it.");
272  }
273  }
274  }
275  }
276 
277  throw DtUnknownStateComponent(T_Component::StringType());
278  }
279 
280  void takeControlOfComponent(DtStateComponent*);
281 
282  virtual const DtString& markingText() const override;
283 
285  {
286  return myFrameState.size();
287  }
288 
289  protected:
290  friend class DtStateData;
291 
295  virtual void removeStateComponent(const DtFrameStateInterface* component) override;
296 
297  protected:
298  std::vector<std::vector<DtFrameStateInterface*> > myFrameState{};
299  };
300 
302  {
303  public:
306  {
307  }
308 
309  virtual ~DtExternalCurrentFrameState() override;
310 
311  bool isValid() const;
312  bool isModified() const;
313 
315  template <typename T_Component>
316  const T_Component* getStateComponent(int index = 0) const;
317 
318  std::set<int> modifiedStateComponentTypes() const;
319 
320  virtual const DtFrameStateInterface* getStateComponent(
321  DtStateComponent::StateComponentType, int index = 0) const override;
322 
323  virtual int numComponents(DtStateComponent::StateComponentType scType) const override
324  {
325  if (scType < myFrameState.size())
326  {
327  return myFrameState[scType].size();
328  }
329 
330  return 0;
331  }
332 
333  template <typename T_Component>
334  std::vector<const T_Component*> getStateComponentList() const
335  {
336  DtStateComponent::StateComponentType scType = T_Component::ComponentType();
337  std::vector<const T_Component*> results;
338 
339  if (scType < myFrameState.size())
340  {
341  std::vector<const DtFrameStateInterface*>::const_iterator iter = myFrameState[scType].begin();
342  std::vector<const DtFrameStateInterface*>::const_iterator end = myFrameState[scType].end();
343  while (iter != end)
344  {
345  results.push_back(dynamic_cast<const T_Component*>(*iter));
346  ++iter;
347  }
348  }
349 
350  return results;
351  }
352 
353  virtual void addStateComponent(const DtFrameStateInterface* comp) override;
354 
355  virtual bool hasStateComponentType(DtStateComponent::StateComponentType scType) const override;
356 
357  virtual const DtString& markingText() const override;
358 
360  {
361  return myFrameState.size();
362  }
363 
365  const std::vector<std::vector<const DtFrameStateInterface*> >& frameStates() const
366  {
367  return myFrameState;
368  }
369 
370  bool advancedFrame() const;
371 
372  protected:
373  friend class DtStateData;
374 
378  virtual void removeStateComponent(const DtFrameStateInterface* component) override;
379 
380  protected:
381  std::vector<std::vector<const DtFrameStateInterface*> > myFrameState{};
382  };
383 
399  {
400  public:
401  using SimStateID = unsigned long long;
403  {
406  PublishComponentsOnly
407  };
408 
409  public:
410 
412 
416  DtStateData();
417 
418  DtStateData(SimStateID, Legion::SimulationDatabase*, DtStateDataManager*);
419  DtStateData(SimStateID, makVrf::UInt64, Legion::SimulationDatabase*, DtStateDataManager*);
420 
422  virtual ~DtStateData();
423 
425  virtual void invalidate();
426  virtual bool isValid() const;
427  virtual bool isWritable() const;
428  virtual void clearStateDataManager();
429 
430  virtual void setAddToSimObjectManager(bool);
432  {
433  return myAddToSimObjectManager;
434  }
435 
436  template <typename T_Component>
438  {
439  if (myWriteStateInstance.isValid())
440  {
441  return myWriteStateInstance.typeExtensionCount<T_Component>();
442  }
443  else
444  {
445  return getCurrentFrameNumberOfLegionComponents<T_Component>();
446  }
447  }
448 
449  template <typename T_Component>
451  {
452  if (myReadStateInstance && myReadStateInstance->isValid())
453  {
454  return myReadStateInstance->typeExtensionCount<T_Component>();
455  }
456  else
457  {
458  return 0;
459  }
460  }
461 
462  template <typename T_Component>
463  unsigned int componentCount() const
464  {
465  if (myWriteStateInstance.isValid())
466  {
467  return myWriteStateInstance.typeExtensionCount<T_Component>();
468  }
469  else if (myReadStateInstance && myReadStateInstance->isValid())
470  {
471  return myReadStateInstance->typeExtensionCount<T_Component>();
472  }
473 
474  return 0;
475  }
476 
477  template <typename T_Component>
478  T_Component findNextFrameLegionComponent(int index = 0)
479  {
480  if (myWriteStateInstance.isValid())
481  {
482  return myWriteStateInstance.findTypeExtension<T_Component>(std::max(0, index));
483  }
484  else
485  {
486  return findCurrentFrameLegionComponent<T_Component>(index);
487  }
488  }
489 
490  template <typename T_Component>
491  T_Component findCurrentFrameLegionComponent(int index = 0) const
492  {
493  if (myReadStateInstance && myReadStateInstance->isValid())
494  {
495  if (T_Component::isType(myReadStateInstance->instanceHandle()))
496  {
497  return T_Component(myReadStateInstance->instanceHandle());
498  }
499 
500  return myReadStateInstance->findTypeExtension<T_Component>(std::max(0, index));
501  }
502  else
503  {
504  return T_Component();
505  }
506  }
507 
508  virtual void markModified();
509  virtual void clearModified();
510 
511  virtual void removeNextFrameStateComponent(const DtFrameStateInterface* f);
512  virtual void removeCurrentFrameStateComponent(const DtFrameStateInterface* f);
513 
514  bool isModified() const;
515 
516  bool advancedFrame() const
517  {
518  return myAdvancedFrame;
519  }
520 
521  bool advancingFrame() const
522  {
523  return myAdvancingFrame;
524  }
525 
527  {
528  return &myNextFrameState;
529  }
530 
532  {
533  return &myCurrentFrameState;
534  }
535 
537 
539  template <typename T_Component>
540  T_Component* addStateComponent(bool checkWritable = false, bool isRemote = false)
541  {
542  return myNextFrameState.addStateComponent<T_Component>(checkWritable, isRemote);
543  }
544 
545  template <typename T_Component>
546  bool isWritable()
547  {
548  return myNextFrameState.isWritable<T_Component>();
549  }
550 
552  {
553  if (myDatabase && myWriteStateInstance.isValid())
554  {
555  destroyInstance(myWriteStateInstance);
556  myWriteStateInstance = Legion::WriteStateInstance();
557  delete myReadStateInstance;
558  myReadStateInstance = nullptr;
559  }
560  }
561 
562  void destroyInstance(const Legion::WriteStateInstance& wsi)
563  {
564  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
565  database()->destroyInstance(wsi);
566  }
567 
569  virtual void createAndInitializeMainInstance();
570 
571  template <typename T_Component>
572  T_Component createMainInstance()
573  {
574  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
575  myWriteStateInstance = myDatabase->createInstance<T_Component>();
576  lock.release();
577 
578  return T_Component(myWriteStateInstance.instanceHandle());
579  }
580 
581  template <typename T_Component>
583  {
584  if (!myWriteStateInstance.isValid())
585  {
586  throw DtUnknownStateComponent("Cannot create a write Legion component on this object.");
587  }
588  else if (myDatabase)
589  {
590  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
591  T_Component comp = myDatabase->createInstance<T_Component>();
592  lock.release();
593 
594  return comp;
595  }
596 
597  return T_Component();
598  }
599 
600  template <typename T_Component>
601  T_Component createInstance()
602  {
603  if (!myWriteStateInstance.isValid())
604  {
605  throw DtUnknownStateComponent("Cannot create a write Legion component on this object.");
606  }
607  else if (myDatabase)
608  {
609  tbb::mutex::scoped_lock lock(theCreateInstanceMutex);
610  T_Component comp = myDatabase->createInstance<T_Component>();
611  lock.release();
612 
613  myWriteStateInstance.addExtension(comp);
614 
615  return comp;
616  }
617 
618  return T_Component();
619  }
620 
621  template <typename T_Component>
623  {
624  if (T_Component::ComponentType() < myStateComponents.size())
625  {
626  if (index < myStateComponents[T_Component::ComponentType()].size())
627  {
628  return myStateComponents[T_Component::ComponentType()][index];
629  }
630  }
631 
632  return nullptr;
633  }
634 
635  template <typename T_Component>
636  const DtStateComponent* getStateComponent(int index = 0) const
637  {
638  if (T_Component::ComponentType() < myStateComponents.size())
639  {
640  if (index < myStateComponents[T_Component::ComponentType()].size())
641  {
642  return myStateComponents[T_Component::ComponentType()][index];
643  }
644  }
645 
646  return nullptr;
647  }
648 
649  template <typename T_Component>
650  std::vector<T_Component*> getNextFrameStateComponentList() const
651  {
652  return myNextFrameState.getStateComponentList<T_Component>();
653  }
654 
655  template <typename T_Component>
656  std::vector<const T_Component*> getCurrentFrameStateComponentList() const
657  {
658  return myCurrentFrameState.getStateComponentList<T_Component>();
659  }
660 
661  template <typename T_Component>
662  bool hasStateComponent(bool checkWritable = false)
663  {
664  try
665  {
666  if (nextFrameState()->hasStateComponent<T_Component>())
667  {
668  if (checkWritable)
669  {
670  return (nextFrameStateComponent<T_Component>()->isWritable());
671  }
672 
673  return true;
674  }
675  else
676  {
677  return currentFrameState()->hasStateComponent<T_Component>();
678  }
679  }
680  catch(...)
681  {
682  return false;
683  }
684 
685  return false;
686  }
687 
688  template <typename T_Component>
689  const bool hasStateComponent() const
690  {
691  if (currentFrameState()->hasStateComponent<T_Component>())
692  {
693  return (dynamic_cast<const T_Component*>(currentFrameState()->getStateComponent<T_Component>()) != nullptr);
694  }
695 
696  return false;
697  }
698 
699  template <typename T_Component>
700  T_Component* nextFrameStateComponent()
701  {
702  T_Component* comp = nextFrameState()->getStateComponent<T_Component>(0);
703  if (comp && comp->isWritable())
704  {
705  return comp;
706  }
707  else
708  {
709  throw DtUnknownStateComponent("This object cannot have state written to it.");
710  }
711  }
712 
713  template <typename T_Component>
714  const T_Component* currentFrameStateComponent() const
715  {
716  return currentFrameState()->getStateComponent<T_Component>(0);
717  }
718 
721  virtual const DtFrameStateInterface* currentFrameStateFor(const DtFrameStateInterface*) const;
722 
723  void removeComponent(Legion::WriteStateInstance& set);
724 
725  bool cleared() const
726  {
727  return myCleared;
728  }
729 
731  bool frozen() const;
732 
733  void setUserData(unsigned long long);
734  unsigned long long userData() const;
735 
736  const DtUUID& uuid() const;
737  void setUUID(const DtUUID&);
738 
741  void setCheckForNameReservation(bool);
742  bool checkForNameReservation() const;
743 
744  void setGlobalId(const DtString& s);
745  const DtString& globalId() const;
746 
747  void setMarkingText(const DtString& name);
748  const DtString& markingText() const;
749 
750  void setAppearance(const DtAppearance&);
751  DtAppearance appearance() const;
752 
753  void setForceType(DtForceType force);
754  DtForceType forceType() const;
755 
756  const DtString parentGlobalId() const;
757  DtString parentGlobalId();
758 
759  const DtString& extendedData(const DtString& key) const;
760  const DtString& nextFrameExtendedData(const DtString& key) const;
761  void setExtendedData(const DtString& key, const DtString& value);
762 
763  const DtUUID& nextFrameHostId() const;
764  const DtUUID& currentFrameHostId() const;
765 
766  bool isClutterEntity() const;
767 
769  void setEntityType(const DtEntityType& type);
770  void setObjectType(const DtEntityType& type) { setEntityType(type); };
771 
772  DtEntityType entityType() const { return DtEntityType(objectType()); };
773  DtEntityType objectType() const;
774 
775  void setEntityId(const DtEntityIdentifier& s);
776  DtEntityIdentifier entityId() const;
777 
779  virtual void setAwaitingTransfer(bool);
780  bool awaitingTransfer() const
781  {
782  return myAwaitingTransfer;
783  }
784 
786  virtual void initializeParameterData(const DtVrfObjectParameters*);
787 
789  virtual bool createPublicData(const DtVrfObjectParameters*, bool isReflectedObject, const DtEntityType& et);
790 
793  {
794  return mySimStateID;
795  }
796 
797  template <typename T_Class>
798  void removeInstanceUpdatedCallback(Legion::InstanceHandle instanceHandle, unsigned int callbackHandle);
799  template <typename T_Class>
800  unsigned int addInstanceUpdatedCallback(DtInstanceUpdatedCallback callback, Legion::InstanceHandle instanceHandle,
801  const std::vector<Legion::AttributeIndex>& attributeIndexFilter = std::vector<Legion::AttributeIndex>());
802 
803  virtual void advanceFrame();
804 
806  virtual void takeControlOfComponent(DtStateComponent*);
807 
809  virtual void setCoordinateSystem(const Coordinate_System*);
810 
811  void setIsLocal(bool b);
812  bool isLocal() const;
813 
815  {
816  return myPublishFlag;
817  }
818 
819  bool isPublishedOnNetwork() const
820  {
821  return ((myPublishFlag == PublishAll) || (myPublishFlag == PublishComponentsOnly));
822  }
823 
825  {
826  return myStateDataManager;
827  }
828 
830  {
831  return myStateDataManager;
832  }
833 
834  double absRealTime() const;
835 
837  {
838  return myCoordinateSystem;
839  }
840 
841  Legion::WriteStateInstance writeStateInstance()
842  {
843  return myWriteStateInstance;
844  }
845 
846  Legion::ReadStateInstance* readStateInstance() const
847  {
848  return myReadStateInstance;
849  }
850 
851  bool convertedToLocal() const
852  {
853  return myConvertedToLocal;
854  }
855 
857  UInt64 legionGlobalId() const;
858 
860  virtual void clearComponents();
861 
864  virtual DtLaserDesignatorStateComponent* addLaserDesignator(bool isRemote = false);
865  virtual void removeLaserDesignator(DtLaserDesignatorStateComponent*);
866 
867  virtual DtTaskVisualizationStateComponent* lineTaskVisualization(const DtString& visualName, const DtString& component);
868  virtual DtTaskVisualizationStateComponent* pointTaskVisualization(const DtString& visualName, const DtString& component);
869  virtual DtTaskVisualizationStateComponent* areaTaskVisualization(const DtString& visualName, const DtString& component);
870  virtual DtTaskVisualizationStateComponent* textTaskVisualization(const DtString& visualName, const DtString& component);
871  virtual void removeTaskVisualization(DtTaskVisualizationStateComponent*);
872 
873  virtual DtEmitterSystemStateComponent* addEmitterSystem(bool isRemote = false);
874  virtual void removeEmitterSystem(DtEmitterSystemStateComponent*);
875 
876  virtual DtActiveSonarStateComponent* addActiveSonarSystem(bool isRemote = false);
877  virtual void removeActiveSonarSystem(DtActiveSonarStateComponent*);
878 
879  virtual DtRadioTransmitterStateComponent* addRadioTransmitter(bool isRemote = false);
880  virtual void removeRadioTransmitter(DtRadioTransmitterStateComponent*);
881 
882  virtual DtNavAidRadioTransmitterStateComponent* addNavAidRadioTransmitter(bool isRemote = false);
883  virtual void removeNavAidRadioTransmitter(DtNavAidRadioTransmitterStateComponent*);
884 
885  virtual DtRadioReceiverStateComponent* addRadioReceiver(bool isRemote = false);
886  virtual void removeRadioReceiver(DtRadioReceiverStateComponent*);
887 
889  virtual DtIffStateComponent* getOrCreateIffSystem(bool isRemote = false);
890  virtual void removeIffSystem();
891 
893  virtual DtUnderwaterAcousticsStateComponent* getOrCreateUnderwaterAcousticsSystem(bool isRemote = false);
894  virtual void removeUnderwaterAcousticsSystem();
895 
896  virtual void removeStateComponent(DtFrameStateInterface*);
898 
899  Legion::SimulationDatabase* database()
900  {
901  return myDatabase;
902  }
903 
906  virtual void convertToRemote(bool onAdvanceFrame = true);
907 
909  virtual void convertToLocal();
910 
913  virtual int indexOfComponent(const DtFrameStateInterface*) const;
914 
916  virtual UInt64 instanceHandle(const DtFrameStateInterface*) const;
917 
919  virtual void shuttingDown();
920 
923  virtual void deletingComponent(DtStateComponent*);
924 
926  {
927  return myParameters;
928  }
929 
935  static void addDefaultPublicDataFor(const std::string& type, const std::string& componentCreator);
936  static void removeDefaultPublicDataFor(const std::string& type, const std::string& componentCreator);
937  static std::set<std::string> defaultPublicDataFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& parameterType);
939 
941  static void addPublicDataFor(const std::string& type, const std::string& componentCreator);
942  static void removePublicDataFor(const std::string& type, const std::string& componentCreator);
943  static std::set<std::string> additionalPublicDataFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& parameterType);
945 
946 
949  static void setDefaultMainComponentFor(const std::string& type, const std::string& defaultPublicData);
950  static std::string defaultMainComponentFor(DtEntityType defaultEntityType, const std::string& dislpayName, const std::string& type);
952 
955  virtual void aboutToBeDeleted();
956 
957  virtual void setPublishingOnLegionNetwork(bool b);
959  {
960  return myPublishingOnLegionNetwork;
961  }
962 
963  virtual const DtSimulatedObjectStateComponent* currentFrameSimulatedObjectStateComponent() const;
964  virtual const DtLocationStateComponent* currentFrameLocationStateComponent() const;
965 
966  protected:
967  virtual DtSimulatedObjectStateComponent* nextFrameSimulatedObjectStateComponent();
968 
970  virtual DtStateData* currentFrameHostStateData() const;
971 
973  virtual bool createMainData(const DtVrfObjectParameters* params, const DtEntityType& et);
974 
975  virtual void hostChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
976  virtual void setupStateComponent(DtStateComponent*, const DtVrfObjectParameters* params = nullptr);
977  virtual void subordinatesChanged(const std::vector<DtUUID>& oldSubordinates, const std::vector<DtUUID>& newSubordinates);
978 
979  friend class DtStateDataManager;
980 
983  {
984  myPublishFlag = b;
985  }
986 
988  virtual std::string defaultParameterTypeForEntityType(const DtEntityType&) const;
989 
992  virtual void completeRemoteConversion();
993 
994  virtual void hostWasDeleted();
995 
996  protected:
998 
999  virtual void removeStateComponent(DtStateComponent::StateComponentType t);
1000  virtual void uuidChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
1001  virtual void markingTextChanged(const DtString& oldUUID, const DtString& newUUID);
1002 
1003  public:
1005  mutable boost::signals2::signal<void (const DtStateData*)> signal_firstFrameAdvance;
1006 
1007  boost::signals2::signal<void(const DtUUID&, const DtUUID&, SimStateID)> signal_uuidChanged;
1008  boost::signals2::signal<void(const DtString&, const DtString&, const DtUUID&, SimStateID)> signal_markingTextChanged;
1009 
1011  boost::signals2::signal<void (const DtStateData*, const DtUUID& oldUUID, const DtUUID& newUUID)> signal_hostChanged;
1012 
1013  mutable boost::signals2::signal<void (const DtStateData*)> signal_stateDataToBeDestroyed;
1014  boost::signals2::signal<void (SimStateID)> signal_preFrameAdvanced;
1015 
1017  mutable boost::signals2::signal<void (const DtStateData*)> signal_frameAdvanced;
1018 
1020  boost::signals2::signal<void (const DtStateData*)> signal_modified;
1021 
1022  boost::signals2::signal<void (DtStateData*)> signal_convertingToRemote;
1023  boost::signals2::signal<void (DtStateData*)> signal_convertedToRemote;
1024 
1025  boost::signals2::signal<void (DtStateData*)> signal_convertingToLocal;
1026  boost::signals2::signal<void (DtStateData*)> signal_convertedToLocal;
1027  mutable boost::signals2::signal<void (DtStateComponent*)> signal_stateComponentAdded;
1028  mutable boost::signals2::signal<void (DtStateComponent*)> signal_stateComponentRemoved;
1029 
1030  boost::signals2::signal<void (const DtStateData*, const std::vector<DtUUID>& added, const std::vector<DtUUID>& removed)> signal_subordinatesChanged;
1031 
1032  protected:
1038 
1040  Legion::SimulationDatabase* myDatabase;
1041 
1043  Legion::WriteStateInstance myWriteStateInstance;
1044  Legion::ReadStateInstance* myReadStateInstance;
1045 
1047 
1048  bool myIsModified = true;
1051 
1053 
1055 
1056  std::vector<std::vector<DtStateComponent*> > myStateComponents;
1057  std::vector<std::vector<DtStateComponent*> > myCreatedStateComponents;
1058  std::set<DtFrameStateInterface*> myRemoveStateComponents;
1059 
1063 
1065  std::atomic<unsigned int> myComponentNumber;
1066 
1067  boost::signals2::scoped_connection mySubordinatesChangedConnection;
1068  boost::signals2::scoped_connection myHostChangedConnection;
1069  boost::signals2::scoped_connection myUUIDChangedConnection;
1070  boost::signals2::scoped_connection myMarkingTextChangedConnection;
1071  mutable boost::signals2::scoped_connection myHostWasDeletedConnection;
1072 
1076  typedef std::map<std::string, std::set<std::string> > PublicData;
1079 
1080  typedef std::map<std::string, std::string> DefaultMainComponentMap;
1083 
1087 
1090  const DtLocationStateComponent* myNextFrameLocationStateComponent = nullptr;
1093  mutable tbb::spin_rw_mutex myCurrentFrameHostStateDataMutex;
1094  static tbb::mutex theCreateInstanceMutex;
1095 
1096  bool myAdvancingFrame = false;
1097  bool myConvertedToLocal = false;
1098  bool myAddToSimObjectManager = true;
1099  bool myOwnsComponents = false;
1100 
1102  DtEntityType myEntityType;
1103  };
1104 }
1105 
1106 #include <vrfStateData/stateData.inl>
unsigned int StateComponentType
Definition: stateComponent.h:56
bool isWritable()
Definition: stateData.h:242
DtEntityType myEntityType
Definition: stateData.h:1102
UUID is a unique ID wrapper class.
Definition: uuid.h:59
bool myAdvancedFrame
Definition: stateData.h:1060
Instances of DtVrfObjectParameters are the readable/writeable objects that contain the information ne...
Definition: vrfObjectParameters.h:64
boost::signals2::scoped_connection myMarkingTextChangedConnection
Definition: stateData.h:1070
T_Component * nextFrameStateComponent()
Definition: stateData.h:700
std::vector< T_Component * > getNextFrameStateComponentList() const
Definition: stateData.h:650
const DtSimulatedObjectStateComponent * myCurrentFrameSimulatedObjectStateComponent
Definition: stateData.h:1088
const T_Component * getStateComponent() const
Definition: stateData.h:96
bool advancingFrame() const
Definition: stateData.h:521
DtExternalCurrentFrameState(DtStateData *sd)
Definition: stateData.h:304
Definition: stateDataTypes.h:23
unsigned long long SimStateID
Definition: stateDataTypes.h:16
std::vector< const T_Component * > getStateComponentList() const
Definition: stateData.h:334
SimStateID stateId() const
The stateId() is the index into internal vectors that this state data is in the position of...
Definition: stateData.h:792
const bool hasStateComponent() const
Definition: stateData.h:689
boost::signals2::scoped_connection mySubordinatesChangedConnection
Definition: stateData.h:1067
boost::signals2::signal< void(SimStateID)> signal_preFrameAdvanced
Definition: stateData.h:1014
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:140
T_Component * getStateComponent(int index=0, bool checkWritable=true)
The current state frame data.
Definition: stateData.h:251
int mySessionId
Definition: stateData.h:1054
The DtLocationStateComponent interface contains the interface that all DtLocationStateComponents can ...
Definition: locationStateComponent.h:25
DtEntityType entityType() const
Definition: stateData.h:772
int getCurrentFrameNumberOfLegionComponents() const
Definition: stateData.h:450
bool convertedToLocal() const
Definition: stateData.h:851
const Coordinate_System * myCoordinateSystem
Definition: stateData.h:1052
std::vector< std::vector< DtStateComponent * > > myStateComponents
Definition: stateData.h:1056
bool cleared() const
Definition: stateData.h:725
int numberOfFrameStates() const
Definition: stateData.h:359
boost::signals2::signal< void(const DtStateData *)> signal_modified
Signal sent if this state had modified components.
Definition: stateData.h:1020
PublishFlag myPublishFlag
Simulated locally vs. remote representation.
Definition: stateData.h:1050
The DtSimulatedObjectStateComponent is an interface that all main components (those that are consider...
Definition: simulatedObjectStateComponent.h:21
T_Component createUnattachedInstance()
Definition: stateData.h:582
boost::signals2::signal< void(const DtString &, const DtString &, const DtUUID &, SimStateID)> signal_markingTextChanged
Definition: stateData.h:1008
static tbb::mutex theCreateInstanceMutex
Definition: stateData.h:1094
static PublicData theDefaultPublicData
Definition: stateData.h:1077
Definition: stateData.h:404
Legion::SimulationDatabase * database()
Definition: stateData.h:899
PublishFlag publishFlag() const
Definition: stateData.h:814
static DefaultMainComponentMap theDefaultMainComponentMap
Definition: stateData.h:1081
voidpf void uLong size
Definition: ioapi.h:39
const DtStateDataManager * stateDataManager() const
Definition: stateData.h:829
DtFrameStateInterface * getStateComponent(DtStateComponent::StateComponentType scType, int index=0)
Definition: stateData.h:225
void setPublishFlag(PublishFlag b)
Only called during construction.
Definition: stateData.h:982
Legion::SimulationDatabase * myDatabase
Definition: stateData.h:1040
bool addToSimObjectManager() const
Definition: stateData.h:431
bool hasStateComponent(bool checkWritable=false)
Definition: stateData.h:662
Definition: stateData.h:139
boost::signals2::signal< void(const DtStateData *)> signal_frameAdvanced
Signal sent regardless of whether or not this state had any modified components.
Definition: stateData.h:1017
virtual int numComponents(DtStateComponent::StateComponentType scType) const override
Definition: stateData.h:323
Contains the DtUUID class declaration.
unsigned long long UInt64
Definition: stateDataTypes.h:17
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:1007
PublishFlag
Definition: stateData.h:402
Legion::ReadStateInstance * myReadStateInstance
Definition: stateData.h:1044
boost::signals2::signal< void(DtStateData *)> signal_convertedToLocal
Definition: stateData.h:1026
unsigned int componentCount() const
Definition: stateData.h:463
std::vector< std::vector< DtStateComponent * > > myCreatedStateComponents
Definition: stateData.h:1057
T_Component findNextFrameLegionComponent(int index=0)
Definition: stateData.h:478
const DtVrfObjectParameters * myParameters
Definition: stateData.h:1084
T_Component createInstance()
Definition: stateData.h:601
unsigned long long SimStateID
Definition: stateData.h:401
Definition: stateData.h:405
virtual int numComponents(DtStateComponent::StateComponentType scType) const override
Definition: stateData.h:166
T_Component findCurrentFrameLegionComponent(int index=0) const
Definition: stateData.h:491
void destroyInstance(const Legion::WriteStateInstance &wsi)
Definition: stateData.h:562
const DtStateComponent * getStateComponent(int index=0) const
Definition: stateData.h:636
int getNextFrameNumberOfLegionComponents()
Definition: stateData.h:437
std::vector< const T_Component * > getCurrentFrameStateComponentList() const
Definition: stateData.h:656
static PublicData theAdditionalPublicData
Definition: stateData.h:1078
boost::signals2::scoped_connection myHostChangedConnection
Definition: stateData.h:1068
std::vector< T_Component * > getStateComponentList() const
Definition: stateData.h:193
boost::signals2::signal< void(const DtExternalFrameStateInterface *)> signal_externalFrameStateToBeDestroyed
Definition: stateData.h:123
DtStateComponent * getStateComponent(int index=0)
Definition: stateData.h:622
DtStateData * myCurrentFrameHostStateData
Definition: stateData.h:1092
Definition: coordSystem.h:54
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
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:61
bool myPublishingOnLegionNetwork
Definition: stateData.h:1085
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:1023
DtExternalNextFrameState * nextFrameState()
Definition: stateData.h:526
Legion::WriteStateInstance myWriteStateInstance
The basic data. This is what all components are hung off of if they are STE compliant.
Definition: stateData.h:1043
typedef long(ZCALLBACK *tell_file_func) OF((voidpf opaque
std::atomic< unsigned int > myComponentNumber
Definition: stateData.h:1065
boost::signals2::signal< void(const DtStateData *, const DtUUID &oldUUID, const DtUUID &newUUID)> signal_hostChanged
Signal sent when the host has changed.
Definition: stateData.h:1011
std::map< std::string, std::string > DefaultMainComponentMap
Definition: stateData.h:1080
const Coordinate_System * coordinateSystem() const
Definition: stateData.h:836
DtExternalCurrentFrameState myCurrentFrameState
Definition: stateData.h:1037
void setObjectType(const DtEntityType &type)
Definition: stateData.h:770
bool isWritable()
Definition: stateData.h:546
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:1076
void destroyMainInstance()
Definition: stateData.h:551
Legion::ReadStateInstance * readStateInstance() const
Definition: stateData.h:846
DtStateDataManager * myStateDataManager
Definition: stateData.h:1039
bool myMainComponentOnLegion
Definition: stateData.h:1086
std::vector< const T_Component * > getStateComponentList() const
Definition: stateData.h:104
Definition: stateData.h:301
UInt64 myLegionGlobalId
Definition: stateData.h:1064
boost::signals2::signal< void(DtStateComponent *)> signal_stateComponentRemoved
Definition: stateData.h:1028
DtExternalNextFrameState(DtStateData *sd)
Definition: stateData.h:142
Legion::WriteStateInstance writeStateInstance()
Definition: stateData.h:841
virtual const DtFrameStateInterface * getStateComponent(DtStateComponent::StateComponentType scType, int index=0) const override
Definition: stateData.h:212
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:516
Definition: stateDataTypes.h:28
DtString myMarkingText
Definition: stateData.h:1101
Definition: stateComponent.h:52
boost::function< void(const std::vector< UInt32 > &)> DtInstanceUpdatedCallback
Definition: stateDataTypes.h:21
boost::signals2::scoped_connection myUUIDChangedConnection
Definition: stateData.h:1069
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:1089
const DtExternalCurrentFrameState * currentFrameState() const
Definition: stateData.h:531
boost::signals2::signal< void(DtStateComponent *)> signal_stateComponentAdded
Definition: stateData.h:1027
std::set< DtFrameStateInterface * > myRemoveStateComponents
Definition: stateData.h:1058
boost::signals2::scoped_connection myHostWasDeletedConnection
Definition: stateData.h:1071
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:136
Definition: stateData.h:73
boost::signals2::signal< void(const DtStateData *)> signal_stateDataToBeDestroyed
Definition: stateData.h:1013
boost::signals2::signal< void(DtStateData *)> signal_convertingToRemote
Definition: stateData.h:1022
bool myConvertToRemote
Definition: stateData.h:1061
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:958
#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:780
bool myAwaitingTransfer
Definition: stateData.h:1062
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:824
const T_Component * getStateComponent(int index=0) const
The current state frame data.
Definition: stateData.h:178
bool myCleared
Definition: stateData.h:1082
tbb::spin_rw_mutex myCurrentFrameHostStateDataMutex
Definition: stateData.h:1093
const DtVrfObjectParameters * parameters()
Definition: stateData.h:925
DtExternalNextFrameState myNextFrameState
Even though this class contains the components, the frame classes will give access to those component...
Definition: stateData.h:1036
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:130
DtSimulatedObjectStateComponent * myNextFrameSimulatedObjectStateComponent
Definition: stateData.h:1091
T_Component createMainInstance()
Definition: stateData.h:572
boost::signals2::signal< void(DtStateData *)> signal_convertingToLocal
Definition: stateData.h:1025
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:294
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:540
bool hasStateComponent() const
Definition: stateData.h:85
bool isPublishedOnNetwork() const
Definition: stateData.h:819
SimStateID mySimStateID
Definition: stateData.h:1046
const std::vector< std::vector< const DtFrameStateInterface * > > & frameStates() const
Definition: stateData.h:365
const T_Component * currentFrameStateComponent() const
Definition: stateData.h:714
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73
int numberOfFrameStates() const
Definition: stateData.h:284
boost::signals2::signal< void(const DtStateData *)> signal_firstFrameAdvance
Signal sent on the first frame advance.
Definition: stateData.h:1005

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