VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
simObjectManagerTemplate.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
10 #include <vrfutil/uuid.h>
11 #include <tbb/spin_rw_mutex.h>
12 #include <boost/signals2.hpp>
13 
14 class DtUUID;
15 class DtEntityIdentifier;
16 
17 namespace makVrf
18 {
19  class DtFrameStateInterface;
20  class DtStateDataWrapper;
21 
38  template <typename T_BaseClass>
40  {
41  private:
45 
46  public:
49 
52 
54  virtual void tick();
55 
57  virtual void init();
58 
60  virtual void advanceFrame();
61 
65  virtual DtSimObjectReferenceTemplate<T_BaseClass> lookup(const DtEntityIdentifier&) const;
66 
68  virtual DtSimObjectReferenceTemplate<T_BaseClass> lookup(unsigned long long) const;
69 
70  virtual DtStateData* stateDataFor(const DtUUID&) const;
71  virtual DtStateData* stateDataFor(unsigned long long) const;
72  virtual DtStateData* stateDataFor(const DtEntityIdentifier&) const;
73  virtual DtStateData* stateDataForUniqueId(unsigned long long) const;
74 
76  mutable boost::signals2::signal<void ()> signal_advancedFrame;
77 
79  mutable boost::signals2::signal<void (DtSimObjectReferenceTemplate<T_BaseClass>)> signal_simObjectAdded;
80 
82  mutable boost::signals2::signal<void (DtSimObjectReferenceTemplate<T_BaseClass>)> signal_simObjectDeleted;
83 
85  mutable boost::signals2::signal<void (const DtUUID& oldUUID, const DtUUID& newUUID)> signal_uuidChanged;
86 
88  mutable boost::signals2::signal<void (const DtUUID& oldUUID, const DtUUID& newUUID)> signal_uuidUpgradedTo;
89 
91  mutable boost::signals2::signal<void (DtSimObjectReferenceTemplate<T_BaseClass>, const DtString& oldText, const DtString& newText)> signal_simObjectRenamed;
92 
93  using SimObjects = std::map<unsigned long long, DtSimObjectReferenceTemplate<T_BaseClass>>;
94 
98  {
99  return mySimObjects;
100  }
101 
102  const SimObjects& simObjects() const
103  {
104  return mySimObjects;
105  }
106 
111 
112  virtual DtStateDataWrapper* createSimObject(DtStateData* sd) const = 0;
113  virtual DtStateDataWrapper* createSimObject(const DtUUID& uuid) const = 0;
114  virtual DtStateDataWrapper* createSimObject(const DtEntityIdentifier& entid) const = 0;
115 
117  virtual void clear();
118 
120  virtual bool has(const DtUUID&) const;
121  virtual bool has(unsigned long long) const;
122 
123  typedef std::set<const DtFrameStateInterface*> CurrentFrameStates;
124  template <typename T_Component> CurrentFrameStates stateComponents() const
125  {
126  std::set<const DtFrameStateInterface*> results;
127 
128  for (auto& sdm : myStateDataManagers)
129  {
130  std::set<const DtFrameStateInterface*> comps = myStateDataManager->stateComponents<T_Component>();
131 
132  for(const auto& fsi : comps)
133  {
134  results.insert(fsi);
135  }
136  }
137 
138  return results;
139  }
140 
142 
143  typedef boost::signals2::signal<void (DtStateComponent*)> StateComponentAddedSignal;
144  typedef boost::signals2::signal<void (DtStateComponent*)> StateComponentRemovedSignal;
145  template <typename T_Component> StateComponentAddedSignal& signalWhenStateComponentAdded()
146  {
147  return myStateDataManager->signalWhenStateComponentAdded(T_Component::ComponentType());
148  }
150  {
151  return myStateDataManager->signalWhenStateComponentRemoved(T_Component::ComponentType());
152  }
153 
156  virtual std::vector<DtSimObjectReferenceTemplate<T_BaseClass>> objectsOfType(const DtEntityType&) const;
157 
158  protected:
159  virtual void simObjectDeleted(const DtStateDataWrapper*);
160  virtual void stateDataDeleted(const DtStateData*);
161 
163  virtual DtSimObjectReferenceTemplate<T_BaseClass> getOrCreateSimObjectReference(DtStateData*, bool createOnlyIfNotPresent = false) const;
164  virtual void uuidChanged(unsigned long long, const DtUUID& oldUUID, const DtUUID& newUUID);
165  virtual void objectRenamed(const DtStateDataWrapper*, const DtString& oldName, const DtString& newName);
166  virtual void simObjectAdded(DtStateData*);
167  virtual void discoveredObjectReference(const DtString& awaiting);
168 
170  bool isDeleted(const DtUUID&) const;
171 
174  virtual void slot_uuidUpgradedTo(const DtUUID& oldUUID, const DtUUID& newUUID);
175 
176  protected:
178  mutable tbb::spin_rw_mutex myMutex;
179  boost::signals2::scoped_connection myUUIDUpgradedConnection;
180 
182  {
183  boost::signals2::scoped_connection stateDataAddedConnection;
184  boost::signals2::scoped_connection uuidChangedConnection;
185  };
186 
187  std::vector<DtStateDataManager*> myStateDataManagerOrder;
188  std::map<DtStateDataManager*, StateDataManagerInformation> myStateDataManagers;
189 
191 
192  typedef std::map<DtString, DtSimObjectReferenceTemplate<T_BaseClass>> AwaitingMap;
194 
196 
198  {
199  std::map<DtUUID, DtSimObjectReferenceTemplate<T_BaseClass>> deletedObjects;
200  std::map<unsigned long long, DtUUID> deletedUUIDs;
201 
202  bool isDeleted(const DtUUID& uuid) const
203  {
204  if (deletedObjects.find(uuid) != deletedObjects.end())
205  {
206  return true;
207  }
208 
209  return false;
210  }
211 
212  bool isDeleted(unsigned long long id) const
213  {
214  std::map<unsigned long long, DtUUID>::const_iterator iter = deletedUUIDs.find(id);
215 
216  if (iter != deletedUUIDs.end())
217  {
218  return isDeleted(iter->second);
219  }
220 
221  return false;
222  }
223 
225  {
226  deletedObjects[so->uuid()] = ref;
227  deletedUUIDs[so->legionGlobalId()] = so->uuid();
228  deletedUUIDs[so->stateId()] = so->uuid();
229  }
230 
231  void clear() { deletedObjects.clear(); deletedUUIDs.clear(); };
232  };
233 
234  DeletedObjects myDeleted;
235 
236  struct Connections
237  {
238  boost::signals2::connection objectDeletedConnection;
239  boost::signals2::connection objectRenamedConnection;
240  };
241 
242  typedef std::map<unsigned long long, Connections> SimObjectConnections;
244  };
245 }
246 
247 #include "simObjectManagerTemplate.inl"
UUID is a unique ID wrapper class.
Definition: uuid.h:59
DtSimObjectManagerTemplate & operator=(const DtSimObjectManagerTemplate &)
StateComponentAddedSignal & signalWhenStateComponentAdded()
Definition: simObjectManagerTemplate.h:145
AwaitingMap myAwaitingMap
Definition: simObjectManagerTemplate.h:193
std::vector< DtStateDataManager * > myStateDataManagerOrder
Definition: simObjectManagerTemplate.h:187
SimObjects mySimObjects
Definition: simObjectManagerTemplate.h:190
SimObjects myAdded
Definition: simObjectManagerTemplate.h:195
virtual ~DtSimObjectManagerTemplate()
DTOR.
virtual DtSimObjectReferenceTemplate< T_BaseClass > getOrCreateSimObjectReference(DtStateData *, bool createOnlyIfNotPresent=false) const
If createOnlyIfNotPresent is true, will create and return, but not add to the mySimObjects list...
SimStateID stateId() const
The stateId() is the index into internal vectors that this state data is in the position of...
Definition: stateData.h:792
boost::signals2::connection objectRenamedConnection
Definition: simObjectManagerTemplate.h:239
boost::signals2::signal< void()> signal_advancedFrame
Signal sent when frame is advanced.
Definition: simObjectManagerTemplate.h:76
virtual DtSimObjectReferenceTemplate< T_BaseClass > lookup(const DtUUID &) const
Find a DtSimObject by DtUUID.
boost::signals2::scoped_connection uuidChangedConnection
Definition: simObjectManagerTemplate.h:184
virtual void slot_uuidUpgradedTo(const DtUUID &oldUUID, const DtUUID &newUUID)
Called, when as part of an import process, a UUID is upgraded from an old to a new version...
Contains the DtUUID class declaration.
DeletedObjects myDeleted
Definition: simObjectManagerTemplate.h:234
virtual void discoveredObjectReference(const DtString &awaiting)
void attachStateDataManager(DtStateDataManager *)
Attach an additional state data manager that might keep track of a separate set of objects...
void track(const DtStateData *so, DtSimObjectReferenceTemplate< T_BaseClass > ref)
Definition: simObjectManagerTemplate.h:224
DtStateDataManager * myStateDataManager
Definition: simObjectManagerTemplate.h:177
boost::signals2::scoped_connection myUUIDUpgradedConnection
Definition: simObjectManagerTemplate.h:179
virtual DtStateData * stateDataForUniqueId(unsigned long long) const
virtual void advanceFrame()
Send out an added signal for all objects added and advanced since the last frame began.
SimObjects simObjects()
Definition: simObjectManagerTemplate.h:97
const DtUUID & uuid() const
bool isDeleted(const DtUUID &uuid) const
Definition: simObjectManagerTemplate.h:202
boost::signals2::connection objectDeletedConnection
Definition: simObjectManagerTemplate.h:238
boost::signals2::scoped_connection stateDataAddedConnection
Definition: simObjectManagerTemplate.h:183
StateComponentSignal & signalWhenStateComponentAdded()
Definition: stateDataManager.h:391
boost::signals2::signal< void(DtSimObjectReferenceTemplate< T_BaseClass >)> signal_simObjectDeleted
Signal sent when a new DtSimObjectReferenceTemplate&lt;T_BaseClass&gt; has been deleted.
Definition: simObjectManagerTemplate.h:82
virtual DtStateData * stateDataFor(const DtUUID &) const
const CurrentFrameStates & stateComponents() const
Definition: stateDataManager.h:417
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
boost::signals2::signal< void(DtSimObjectReferenceTemplate< T_BaseClass >, const DtString &oldText, const DtString &newText)> signal_simObjectRenamed
Signal sent when an objects name has changed.
Definition: simObjectManagerTemplate.h:91
virtual void clear()
Clears sim objects and awaiting map.
virtual void referenceAdded(DtSimObjectReferenceTemplate< T_BaseClass > ref)
virtual void init()
Any initialization that wants to be done.
const SimObjects & simObjects() const
Definition: simObjectManagerTemplate.h:102
virtual void simObjectDeleted(const DtStateDataWrapper *)
CurrentFrameStates stateComponents() const
Definition: simObjectManagerTemplate.h:124
This class is the central access point for all current-frame state of all objects in the simulation i...
Definition: simObjectManagerTemplate.h:39
tbb::spin_rw_mutex myMutex
Definition: simObjectManagerTemplate.h:178
boost::signals2::signal< void(DtStateComponent *)> StateComponentRemovedSignal
Definition: simObjectManagerTemplate.h:144
virtual void objectRenamed(const DtStateDataWrapper *, const DtString &oldName, const DtString &newName)
std::map< DtUUID, DtSimObjectReferenceTemplate< T_BaseClass > > deletedObjects
Definition: simObjectManagerTemplate.h:199
virtual void tick()
Ticks this manager and performs any operations it needs to.
The DtSimObjectReferenceTemplate is a shared pointer that can be used amongst many object for access ...
Definition: simObjectReferenceTemplate.h:27
bool isDeleted(unsigned long long id) const
Definition: simObjectManagerTemplate.h:212
std::map< DtStateDataManager *, StateDataManagerInformation > myStateDataManagers
Definition: simObjectManagerTemplate.h:188
std::map< unsigned long long, DtSimObjectReferenceTemplate< DtSimObject >> SimObjects
Definition: simObjectManagerTemplate.h:93
virtual void stateDataDeleted(const DtStateData *)
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: stateDataWrapper.h:49
Definition: simObjectManagerTemplate.h:236
virtual bool has(const DtUUID &) const
Returns true if this manager has the UUID in the mySimObjects list.
boost::signals2::signal< void(DtStateComponent *)> StateComponentAddedSignal
Definition: simObjectManagerTemplate.h:143
virtual std::vector< DtSimObjectReferenceTemplate< T_BaseClass > > objectsOfType(const DtEntityType &) const
Definition: simObjectManagerTemplate.h:181
StateComponentSignal & signalWhenStateComponentRemoved()
Definition: stateDataManager.h:404
std::set< const DtFrameStateInterface * > CurrentFrameStates
Definition: simObjectManagerTemplate.h:123
std::map< unsigned long long, Connections > SimObjectConnections
Definition: simObjectManagerTemplate.h:242
boost::signals2::signal< void(const DtUUID &oldUUID, const DtUUID &newUUID)> signal_uuidUpgradedTo
Signal when a UUID is remapped. Called after awaiting list has been changed.
Definition: simObjectManagerTemplate.h:88
void clear()
Definition: simObjectManagerTemplate.h:231
virtual void uuidChanged(unsigned long long, const DtUUID &oldUUID, const DtUUID &newUUID)
std::map< DtString, DtSimObjectReferenceTemplate< T_BaseClass > > AwaitingMap
Definition: simObjectManagerTemplate.h:192
std::map< unsigned long long, DtUUID > deletedUUIDs
Definition: simObjectManagerTemplate.h:200
Definition: simObjectManagerTemplate.h:197
virtual DtStateDataWrapper * createSimObject(DtStateData *sd) const =0
UInt64 legionGlobalId() const
ID that is common to all objects that represent this data.
SimObjectConnections mySimObjectConnections
Definition: simObjectManagerTemplate.h:243
StateComponentAddedSignal & signalWhenStateComponentRemoved()
Definition: simObjectManagerTemplate.h:149
boost::signals2::signal< void(DtSimObjectReferenceTemplate< T_BaseClass >)> signal_simObjectAdded
Signal sent when a new DtSimObjectReferenceTemplate&lt;T_BaseClass&gt; has been added.
Definition: simObjectManagerTemplate.h:79
void detachStateDataManager(DtStateDataManager *)
virtual void simObjectAdded(DtStateData *)
bool isDeleted(const DtUUID &) const
If this is in the list but is marked as deleted, returns true.
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73
boost::signals2::signal< void(const DtUUID &oldUUID, const DtUUID &newUUID)> signal_uuidChanged
Signal when UUID is changed. Called before the map is updated with the new uuid.
Definition: simObjectManagerTemplate.h:85

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)