VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfDataProcessorInterface.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 
11 #include <legionDataStore/dataTypes.h>
16 #include <vlutil/vlPerformanceStats.h>
17 #include <boost/signals2.hpp>
18 #include <boost/unordered_set.hpp>
19 #include <tbb/spin_rw_mutex.h>
20 #include <tbb/spin_mutex.h>
21 #include <map>
22 
23 namespace makVrv
24 {
25  class DtSimEntryObjectAgent;
26  class DtSimStateObjectAgent;
27  class DtBaseConnection;
28 }
29 
30 namespace makVrf
31 {
32  class DtStateComponent;
33  class DtSimDataProcessorManager;
34 
36  {
37  public:
39  virtual const char* processorName() const = 0;
40  virtual makVrv::DtUniqueID vantageIdFromLegionId(Legion::UInt64 lid) const = 0;
41 
42  protected:
43  virtual const makVrv::DtSimState& emptyState() const = 0;
44 
47  static void AddEntry(makVrv::DtSimEntryObjectAgent*, makVrv::DtUniqueID);
48  static void RemoveEntry(makVrv::DtSimEntryObjectAgent*, makVrv::DtUniqueID);
49 
50  protected:
51  static tbb::spin_mutex theEntryMapMutex;
52  static std::map<makVrv::DtUniqueID, int> theEntryMap;
53  };
54 
56  {
57  public:
58  virtual void setState(const DtStateData*, makVrv::DtSimState&) = 0;
59  virtual void createAndSendState(DtStateData*, makVrv::DtSimStateObjectAgent&, bool force = false) = 0;
60  virtual void slot_postUpdateCallback(const DtStateData*) = 0;
61  };
62 
63  template <typename T_Agent>
65  {
66  public:
67 
70 
72  virtual ~DtVrfDataProcessor();
73 
77 
80  virtual void queueDataDiscovered(DtStateData* sd);
81  virtual void queueRemoveData(const DtStateData*);
82 
84  virtual bool dataDiscovered(DtStateData* sd);
85  virtual void removeData(Legion::UInt64 legionGlobalId);
86  virtual void componentUpdated(const DtFrameStateInterface*);
87 
89  virtual void queueFunction(const boost::function<void ()>& function);
90 
91  protected:
92  virtual void slot_frameAdvanced();
93 
95  virtual bool shouldForceObjectUpdate(const DtFrameStateInterface*) const;
96 
98 
99  virtual void addSimData(DtStateData* sd);
100 
102 
103  virtual void setDiscoverBackgroundEntities(bool);
104 
106 
108 
109  //A Listener and a driver which will be updated with it.
111  {
112  public:
113 
115  UInt64 legionGlobalId,
116  makVrv::DtSimStateObjectAgent& driver,
118  : myStateData(listener)
119  , myObjectAgent(&driver)
120  , myDataProcessorInterface(&iface)
121  , myLegionGlobalId(legionGlobalId)
122  {
123  }
124 
126  : myStateData(orig.myStateData)
130  {
131  }
132 
134  {
135  myStateData = orig.myStateData;
139 
140  return *this;
141  }
142 
143  //Are the updaters equal
144  bool operator==(const StateDataUpdater& orig) const
145  {
146  return ((myLegionGlobalId == orig.myLegionGlobalId) &&
147  (myObjectAgent == orig.myObjectAgent));
148  }
149 
150  void update(double);
151 
153  {
154  return myLegionGlobalId;
155  }
156 
157  protected:
159  makVrv::DtSimStateObjectAgent* myObjectAgent;
162  };
163 
164  virtual void dataDiscoveredByLegionId(Legion::UInt64 lid);
165  virtual void dataRemovedByLegionId(Legion::UInt64 lid);
166 
167  protected:
168  std::set<makVrv::DtUniqueID> myUpdated;
169 
173 
175  makVrv::DtSimEntryObjectAgent* mySimEntryAgent;
176 
178  typedef std::map<makVrv::DtSimEntryUpdater::UpdateRate, UpdaterGroup> UpdateGroupMap;
179 
181 
182  typedef std::set<makVrv::DtUniqueID> EntityIdList;
184 
186  {
187  SimDataInstance() : myStateData(0), myLegionGlobalId(0), myAgent(0), myRate(makVrv::DtSimEntryUpdater::NoUpdates) {};
188 
191  makVrv::DtSimStateObjectAgent* myAgent;
193  };
194 
195  typedef std::map<makVrv::DtUniqueID, SimDataInstance> AgentMap;
197 
198  boost::signals2::connection myVantageToLegionIdMapperConnection;
199 
200  std::set<makVrv::DtUniqueID> myAwaitingValidId;
203  tbb::spin_rw_mutex myMutex;
204  };
205 }
DtSimDataProcessorManager * mySimDataProcessorManager
Definition: vrfDataProcessorInterface.h:201
std::set< makVrv::DtUniqueID > myAwaitingValidId
Definition: vrfDataProcessorInterface.h:200
Legion::UInt64 myLegionGlobalId
Definition: vrfDataProcessorInterface.h:161
boost::signals2::connection myVantageToLegionIdMapperConnection
Definition: vrfDataProcessorInterface.h:198
Contains makVrv::DtSimDataProcessorInterface class.
StateDataUpdater(DtStateData *listener, UInt64 legionGlobalId, makVrv::DtSimStateObjectAgent &driver, DtVrfDataProcessor< T_Agent > &iface)
Definition: vrfDataProcessorInterface.h:114
virtual ~DtVrfDataProcessor()
DTOR.
Definition: vrfDataProcessorInterface.h:64
Definition: vrfDataProcessorInterface.h:110
bool myDiscoverBackgroundEntities
Definition: vrfDataProcessorInterface.h:202
AgentMap myAgents
Definition: vrfDataProcessorInterface.h:196
UpdateRate
Definition: DtSimEntryUpdater.h:31
virtual void addSimData(DtStateData *sd)
This class will manage the data processors. It will be the spot that the data processors can post mes...
Definition: simDataProcessorManager.h:25
std::map< makVrv::DtSimEntryUpdater::UpdateRate, UpdaterGroup > UpdateGroupMap
Definition: vrfDataProcessorInterface.h:178
virtual void dataRemovedByLegionId(Legion::UInt64 lid)
makVrv::DtBaseConnection & mySimulation
Definition: vrfDataProcessorInterface.h:172
virtual void dataDiscoveredByLegionId(Legion::UInt64 lid)
Legion::UInt64 legionGlobalId() const
Definition: vrfDataProcessorInterface.h:152
makVrv::DtSimEntryObjectAgent * mySimEntryAgent
Definition: vrfDataProcessorInterface.h:175
DtSimDataProcessorManager * simDataProcessorManager()
Definition: vrfDataProcessorInterface.h:35
SimDataInstance()
Definition: vrfDataProcessorInterface.h:187
virtual void setDiscoverBackgroundEntities(bool)
virtual void componentUpdated(const DtFrameStateInterface *)
virtual void removeData(Legion::UInt64 legionGlobalId)
makVrv::DtBalancedUpdater< StateDataUpdater > UpdaterGroup
Definition: vrfDataProcessorInterface.h:177
StateDataUpdater & operator=(const StateDataUpdater &orig)
Definition: vrfDataProcessorInterface.h:133
The DtBaseConnection is an abstract class.
Definition: DtBaseConnection.h:38
virtual void setObjectUpdateRate(makVrv::DtUniqueID uniqueId, makVrv::DtSimEntryUpdater::UpdateRate rate)
Set a particular object update.
makVrv::DtSignalConnectionManager myConnectionManager
Definition: vrfDataProcessorInterface.h:171
makVrv::DtSimStateObjectAgent * myObjectAgent
Definition: vrfDataProcessorInterface.h:159
makVrv::DtSimStateObjectAgent * myAgent
Definition: vrfDataProcessorInterface.h:191
DtStateDataManager * stateDataManager()
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:336
std::set< makVrv::DtUniqueID > EntityIdList
Definition: vrfDataProcessorInterface.h:182
StateDataUpdater(const StateDataUpdater &orig)
Definition: vrfDataProcessorInterface.h:125
virtual makVrv::DtUniqueID vantageIdFromLegionId(Legion::UInt64) const
virtual void queueRemoveData(const DtStateData *)
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
unsigned long long UInt64
Definition: stateDataTypes.h:17
DtBalanacedUpdater updates updatee classes at a desired rate in a fair (each instance gets the same n...
Definition: DtBalancedUpdater.h:26
tbb::spin_rw_mutex myMutex
Definition: vrfDataProcessorInterface.h:203
EntityIdList myForceUpdateList
Definition: vrfDataProcessorInterface.h:183
virtual void slot_frameAdvanced()
UInt64 myLegionGlobalId
Definition: vrfDataProcessorInterface.h:190
DtVrfDataProcessor< T_Agent > * myDataProcessorInterface
Definition: vrfDataProcessorInterface.h:160
DtStateData * myStateData
Definition: vrfDataProcessorInterface.h:158
Methods a data processor needs to implement to be considered a data processor.
Definition: DtSimDataProcessorInterface.h:24
makVrv::DtSimEntryUpdater::UpdateRate myRate
Definition: vrfDataProcessorInterface.h:192
static tbb::spin_mutex theEntryMapMutex
Definition: vrfDataProcessorInterface.h:51
Contains makVrv::DtSimEntryUpdater class.
Definition: vrfDataProcessorInterface.h:185
Contains makVrv::DtBalancedUpdater class.
#define DT_DLL_vrfGuiNetworkCommon
This file is used to determine how to build.
Definition: vrfGuiNetworkCommonDefines.h:24
bool operator==(const StateDataUpdater &orig) const
Definition: vrfDataProcessorInterface.h:144
Base class to provide boost signal/slot management.
virtual bool shouldForceObjectUpdate(const DtFrameStateInterface *) const
Default return false.
A DtSimState is the base class for all state objects. Derived instances of DtSimState will be created...
Definition: DtSimState.h:19
static std::map< makVrv::DtUniqueID, int > theEntryMap
Definition: vrfDataProcessorInterface.h:52
virtual void forceObjectUpdate(makVrv::DtUniqueID)
DtStateDataManager * myStateDataManager
Definition: vrfDataProcessorInterface.h:170
UpdateGroupMap myRefreshRateGroups
Definition: vrfDataProcessorInterface.h:180
DtTimedSection myTimer
Definition: vrfDataProcessorInterface.h:174
virtual void queueFunction(const boost::function< void()> &function)
Put a function in the sim function queue, for threadsafe calling.
virtual bool dataDiscovered(DtStateData *sd)
Call when new data is discovered. If valid to add will call addSimData.
DtVrfDataProcessor(DtStateDataManager *, makVrv::DtBaseConnection &)
CTOR.
std::map< makVrv::DtUniqueID, SimDataInstance > AgentMap
Definition: vrfDataProcessorInterface.h:195
Definition: vrfDataProcessorInterface.h:55
virtual void queueDataDiscovered(DtStateData *sd)
Call this methd to queue the method to discover the data such that it can all happen in the thread th...
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:282
virtual void vantageIdMapped(makVrv::DtUniqueID, Legion::UInt64)
DtStateData * myStateData
Definition: vrfDataProcessorInterface.h:187
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:71
std::set< makVrv::DtUniqueID > myUpdated
Definition: vrfDataProcessorInterface.h:168

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)