VR-Forces 5.0.2 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtSimObjectEntryCollection.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/vrvCore.h>
13 #include <vrvCore/DtDe.h>
14 #include <vrvCore/DtUniqueID.h>
16 #include <vrvCore/DtDataBank.h>
17 #include <vrvCore/DtStateView.h>
18 #include <boost/bind.hpp>
19 
20 namespace makVrv
21 {
24  template<class T>
26  {
27 
28  public:
29 
31  typedef std::map<DtUniqueID, DtSimObjectEntry*> SimObjectEntryMap;
32 
37 
40 
42  size_t size() const;
43 
45  const SimObjectEntryMap& simObjectEntryMap() const;
46 
49 
51  boost::signalslib::signal<void (DtSimObjectEntry&)> signal_simObjectEntryAdded;
52 
54  boost::signalslib::signal<void (DtSimObjectEntry&)> signal_simObjectEntryAboutToBeRemoved;
55 
56  protected:
57 
60 
63 
66 
69 
71  bool isCompatible(DtSimObjectEntry& entry);
72 
74  bool isCompatible(DtSimState& entry);
75 
78 
79  private:
84 
85  protected:
86 
89 
90  };
91 
92  template<class T>
94  : myDe(de)
95  , mySimObjectEntryMap()
96  {
97  DtSimData& simDataObj = myDe.dataBank().simData();
98 
100  simDataObj.signal_simObjectEntryAdded.connect(boost::bind(
102 
105 
107  simDataObj.signal_simStateAdded.connect(boost::bind(
109 
110  simDataObj.signal_simStateToBeRemoved.connect(boost::bind(
112 
114  }
115 
116  template<class T>
118  {
119  DtSimData& simDataObj = myDe.dataBank().simData();
120 
122  simDataObj.signal_simObjectEntryAdded.disconnect(boost::bind(
124 
125  simDataObj.signal_simObjectEntryToBeRemoved.disconnect(boost::bind(
127 
129  simDataObj.signal_simStateAdded.disconnect(boost::bind(
131 
132  simDataObj.signal_simStateToBeRemoved.disconnect(boost::bind(
134  }
135 
136  template<class T>
138  {
139  if(isCompatible(entry))
140  {
142  onSimObjectEntryAboutToBeRemoved(entry);
143 
145  mySimObjectEntryMap[ entry.id() ] = &entry;
146  signal_simObjectEntryAdded(entry);
147  }
148  }
149 
150  template<class T>
152  {
153  if(isCompatible(state))
154  {
156  onSimObjectStateEntryAboutToBeRemoved(entry, state);
157 
159  mySimObjectEntryMap[ entry.id() ] = &entry;
160  signal_simObjectEntryAdded(entry);
161  }
162  }
163 
164  template<class T>
166  {
167  if(isCompatible(entry))
168  {
169  SimObjectEntryMap::iterator iter = mySimObjectEntryMap.find(entry.id());
170  if(iter != mySimObjectEntryMap.end())
171  {
172  signal_simObjectEntryAboutToBeRemoved(entry);
173  mySimObjectEntryMap.erase(iter);
174  }
175  }
176  }
177 
178  template<class T>
180  {
181  if(isCompatible(state))
182  {
183  SimObjectEntryMap::iterator iter = mySimObjectEntryMap.find(entry.id());
184  if(iter != mySimObjectEntryMap.end())
185  {
186  signal_simObjectEntryAboutToBeRemoved(entry);
187  mySimObjectEntryMap.erase(iter);
188  }
189  }
190  }
191 
192  template<class T>
194  {
195  return DtStateView<T>::isCompatible(entry);
196  }
197 
198  template<class T>
200  {
201  return DtStateView<T>::isCompatible(state);
202  }
203 
204  template<class T>
206  {
207  return mySimObjectEntryMap.size();
208  }
209 
210  template<class T>
212  {
213  DtSimData::SimEntryMap::const_iterator pos;
214  for(pos=myDe.dataBank().simData().simEntryMap().begin(); pos !=
215  myDe.dataBank().simData().simEntryMap().end(); ++pos )
216  {
217  DtSimObjectEntry* pEntry = dynamic_cast<DtSimObjectEntry*>(pos->second);
218  if(pEntry)
219  {
220  onSimObjectEntryAdded(*pEntry);
221  }
222  }
223  }
224 
225  template<class T>
228  {
229  return mySimObjectEntryMap;
230  }
231 
232  template<class T>
234  DtUniqueID id) const
235  {
236  DtSimObjectEntry* entry = 0;
237  SimObjectEntryMap::const_iterator iter = mySimObjectEntryMap.find(id);
238  if(iter != mySimObjectEntryMap.end())
239  {
240  entry = iter->second;
241  }
242  return entry;
243  }
244 }
DtDe & myDe
Definition: DtSimObjectEntryCollection.h:87
void populateFromExistingEntries()
Go through existing DtSimEntry&#39;s and populate this container.
Definition: DtSimObjectEntryCollection.h:211
void onSimObjectEntryAdded(DtSimObjectEntry &entry)
Called when a DtSimObjectEntry is added.
Definition: DtSimObjectEntryCollection.h:137
virtual ~DtSimObjectEntryCollection()
DTOR.
Definition: DtSimObjectEntryCollection.h:117
DtSimObjectEntryCollection()
Protected CTOR.
A DtSimObjectEntryCollection is a collection of DtSimObjectEntry&#39;s that have a specific state...
Definition: DtSimObjectEntryCollection.h:25
DtUniqueID id() const
Return the unique Id of this entry.
The DtSimData is the repository for simulation specific, read only data. The DtSimData has a map of D...
Definition: DtSimData.h:31
boost::signalslib::signal< void(DtSimObjectEntry &)> signal_simObjectEntryAdded
Signal emitted when a DtSimObjectEntry is added.
Definition: DtSimObjectEntryCollection.h:51
Contains makVrv::DtStateView class.
void onSimObjectStateEntryAboutToBeRemoved(DtSimObjectEntry &entry, DtSimState &)
Called when a DtSimState is about to be removed from a DtSimObjectEntry.
Definition: DtSimObjectEntryCollection.h:179
Contains makVrv::DtDe class.
const SimObjectEntryMap & simObjectEntryMap() const
Return the map of DtSimObjectEntry&#39;s in this collection.
Definition: DtSimObjectEntryCollection.h:227
boost::signalslib::signal< void(DtSimObjectEntry &)> signal_simObjectEntryAboutToBeRemoved
Signal emitted when a DtSimObjectEntry is about to be removed.
Definition: DtSimObjectEntryCollection.h:54
std::map< DtUniqueID, DtSimObjectEntry * > SimObjectEntryMap
Map of unique id&#39;s to DtSimObjectEntry&#39;s.
Definition: DtSimObjectEntryCollection.h:31
const DtSimObjectEntry * findSimObjectEntry(DtUniqueID id) const
Find DtSimEntry by id.
Definition: DtSimObjectEntryCollection.h:233
virtual DtDataBank & dataBank()
The DtDataBank accessor.
binderNoArgs< _Fn > bind(const _Fn &_Func, const _Ty &_Left)
Definition: DtSTLUtilities.h:76
A DtSimObjectEntry is an entry for a persistent simulation object like an entity. ...
Definition: DtSimObjectEntry.h:22
SimObjectEntryMap mySimObjectEntryMap
Definition: DtSimObjectEntryCollection.h:88
Contains makVrv::DtSimObjectEntry class.
void onSimObjectEntryAboutToBeRemoved(DtSimObjectEntry &entry)
Called when a DtSimObjectEntry is about to be removed.
Definition: DtSimObjectEntryCollection.h:165
boost::signalslib::signal< void(DtSimObjectEntry &)> signal_simObjectEntryAdded
Signal emitted when a DtSimObjectEntry is added.
Definition: DtSimData.h:89
DtSimObjectEntryCollection & operator=(const DtSimObjectEntryCollection &)
void onSimObjectStateEntryAdded(DtSimObjectEntry &entry, DtSimState &)
Called when a DtSimState is added to a DtSimObjectEntry.
Definition: DtSimObjectEntryCollection.h:151
boost::signalslib::signal< void(DtSimObjectEntry &, DtSimState &)> signal_simStateAdded
Signal emitted when a DtSimState is added to a DtSimEntry.
Definition: DtSimData.h:95
boost::signalslib::signal< void(DtSimObjectEntry &, DtSimState &)> signal_simStateToBeRemoved
Signal emitted when a DtSimEntry is about to be removed from a DtSimObjectEntry.
Definition: DtSimData.h:99
A DtSimState is the base class for all state objects. Derived instances of DtSimState will be created...
Definition: DtSimState.h:19
Contains makVrv::DtUniqueID type.
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:70
bool isCompatible(DtSimObjectEntry &entry)
Returns true if the DtSimEntry contains a state of type T.
Definition: DtSimObjectEntryCollection.h:193
size_t size() const
Return the number of the objects in the container.
Definition: DtSimObjectEntryCollection.h:205
DtSimData & simData()
Get simulation data. DtSimData contains simulation-specific state data.
Contains makVrv::DtDataBank class.
static bool isCompatible(DtSimEntry &entry)
Returns true if the DtSimEntry contains a state of type T.
Definition: DtStateView.h:150
boost::signalslib::signal< void(DtSimObjectEntry &)> signal_simObjectEntryToBeRemoved
Signal emitted when a DtSimObjectEntry is about to be removed.
Definition: DtSimData.h:92
Contains DLL export macros.

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