VR-Forces 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  virtual Legion::UInt64 legionIdFromVantageId(makVrv::DtUniqueID lid) const = 0;
42 
43  protected:
44  virtual const makVrv::DtSimState& emptyState() const = 0;
45 
48  static void AddEntry(makVrv::DtSimEntryObjectAgent*, makVrv::DtUniqueID);
49  static void RemoveEntry(makVrv::DtSimEntryObjectAgent*, makVrv::DtUniqueID);
50 
51  protected:
52  static tbb::spin_mutex theEntryMapMutex;
53  static std::map<makVrv::DtUniqueID, int> theEntryMap;
54  };
55 
57  {
58  public:
59  virtual void setState(const DtStateData*, makVrv::DtSimState&) = 0;
60  virtual void createAndSendState(DtStateData*, makVrv::DtSimStateObjectAgent&, bool force = false) = 0;
61  virtual void slot_postUpdateCallback(const DtStateData*) = 0;
62  };
63 
64  template <typename T_Agent>
66  {
67  public:
68 
71 
73  virtual ~DtVrfDataProcessor();
74 
78 
81  virtual void queueDataDiscovered(DtStateData* sd);
82  virtual void queueRemoveData(const DtStateData*);
83 
85  virtual bool dataDiscovered(DtStateData* sd);
86  virtual void removeData(Legion::UInt64 legionGlobalId);
87  virtual void componentUpdated(const DtFrameStateInterface*);
88 
90  virtual void queueFunction(const boost::function<void ()>& function);
91 
92  protected:
93  virtual void slot_frameAdvanced();
94 
96  virtual bool shouldForceObjectUpdate(const DtFrameStateInterface*) const;
97 
99  virtual Legion::UInt64 legionIdFromVantageId(makVrv::DtUniqueID lid) const override;
100 
101  virtual void addSimData(DtStateData* sd);
102 
104 
105  virtual void setDiscoverBackgroundEntities(bool);
106 
108 
110 
111  //A Listener and a driver which will be updated with it.
113  {
114  public:
115 
117  UInt64 legionGlobalId,
118  makVrv::DtSimStateObjectAgent& driver,
120  : myStateData(listener)
121  , myObjectAgent(&driver)
122  , myDataProcessorInterface(&iface)
123  , myLegionGlobalId(legionGlobalId)
124  {
125  }
126 
128  : myStateData(orig.myStateData)
132  {
133  }
134 
136  {
137  myStateData = orig.myStateData;
141 
142  return *this;
143  }
144 
145  //Are the updaters equal
146  bool operator==(const StateDataUpdater& orig) const
147  {
148  return ((myLegionGlobalId == orig.myLegionGlobalId) &&
149  (myObjectAgent == orig.myObjectAgent));
150  }
151 
152  void update(double);
153 
155  {
156  return myLegionGlobalId;
157  }
158 
159  protected:
161  makVrv::DtSimStateObjectAgent* myObjectAgent;
164  };
165 
166  virtual void dataDiscoveredByLegionId(Legion::UInt64 lid);
167  virtual void dataRemovedByLegionId(Legion::UInt64 lid);
168 
169  protected:
170  std::set<makVrv::DtUniqueID> myUpdated;
171 
175 
177  makVrv::DtSimEntryObjectAgent* mySimEntryAgent;
178 
180  typedef std::map<makVrv::DtSimEntryUpdater::UpdateRate, UpdaterGroup> UpdateGroupMap;
181 
183 
184  typedef std::set<makVrv::DtUniqueID> EntityIdList;
186 
188  {
189  SimDataInstance() : myStateData(0), myLegionGlobalId(0), myAgent(0), myRate(makVrv::DtSimEntryUpdater::NoUpdates) {};
190 
193  makVrv::DtSimStateObjectAgent* myAgent;
195  };
196 
197  typedef std::map<makVrv::DtUniqueID, SimDataInstance> AgentMap;
199 
200  boost::signals2::connection myVantageToLegionIdMapperConnection;
201 
202  std::set<makVrv::DtUniqueID> myAwaitingValidId;
205  tbb::spin_rw_mutex myMutex;
207  };
208 }
DtSimDataProcessorManager * mySimDataProcessorManager
Definition: vrfDataProcessorInterface.h:203
std::set< makVrv::DtUniqueID > myAwaitingValidId
Definition: vrfDataProcessorInterface.h:202
Legion::UInt64 myLegionGlobalId
Definition: vrfDataProcessorInterface.h:163
boost::signals2::connection myVantageToLegionIdMapperConnection
Definition: vrfDataProcessorInterface.h:200
Contains makVrv::DtSimDataProcessorInterface class.
StateDataUpdater(DtStateData *listener, UInt64 legionGlobalId, makVrv::DtSimStateObjectAgent &driver, DtVrfDataProcessor< T_Agent > &iface)
Definition: vrfDataProcessorInterface.h:116
virtual ~DtVrfDataProcessor()
DTOR.
Definition: vrfDataProcessorInterface.h:65
Definition: vrfDataProcessorInterface.h:112
AgentMap myAgents
Definition: vrfDataProcessorInterface.h:198
UpdateRate
Definition: DtSimEntryUpdater.h:31
virtual void addSimData(DtStateData *sd)
int myTotalUpdated
Definition: vrfDataProcessorInterface.h:206
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:180
virtual void dataRemovedByLegionId(Legion::UInt64 lid)
makVrv::DtBaseConnection & mySimulation
Definition: vrfDataProcessorInterface.h:174
virtual void dataDiscoveredByLegionId(Legion::UInt64 lid)
Legion::UInt64 legionGlobalId() const
Definition: vrfDataProcessorInterface.h:154
makVrv::DtSimEntryObjectAgent * mySimEntryAgent
Definition: vrfDataProcessorInterface.h:177
DtSimDataProcessorManager * simDataProcessorManager()
Definition: vrfDataProcessorInterface.h:35
SimDataInstance()
Definition: vrfDataProcessorInterface.h:189
virtual void setDiscoverBackgroundEntities(bool)
virtual void componentUpdated(const DtFrameStateInterface *)
virtual void removeData(Legion::UInt64 legionGlobalId)
makVrv::DtBalancedUpdater< StateDataUpdater > UpdaterGroup
Definition: vrfDataProcessorInterface.h:179
StateDataUpdater & operator=(const StateDataUpdater &orig)
Definition: vrfDataProcessorInterface.h:135
The DtBaseConnection is an abstract class.
Definition: DtBaseConnection.h:35
virtual void setObjectUpdateRate(makVrv::DtUniqueID uniqueId, makVrv::DtSimEntryUpdater::UpdateRate rate)
Set a particular object update.
makVrv::DtSignalConnectionManager myConnectionManager
Definition: vrfDataProcessorInterface.h:173
makVrv::DtSimStateObjectAgent * myObjectAgent
Definition: vrfDataProcessorInterface.h:161
makVrv::DtSimStateObjectAgent * myAgent
Definition: vrfDataProcessorInterface.h:193
DtStateDataManager * stateDataManager()
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
std::set< makVrv::DtUniqueID > EntityIdList
Definition: vrfDataProcessorInterface.h:184
StateDataUpdater(const StateDataUpdater &orig)
Definition: vrfDataProcessorInterface.h:127
virtual makVrv::DtUniqueID vantageIdFromLegionId(Legion::UInt64) const override
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:205
EntityIdList myForceUpdateList
Definition: vrfDataProcessorInterface.h:185
virtual void slot_frameAdvanced()
UInt64 myLegionGlobalId
Definition: vrfDataProcessorInterface.h:192
DtVrfDataProcessor< T_Agent > * myDataProcessorInterface
Definition: vrfDataProcessorInterface.h:162
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
DtStateData * myStateData
Definition: vrfDataProcessorInterface.h:160
Methods a data processor needs to implement to be considered a data processor.
Definition: DtSimDataProcessorInterface.h:24
makVrv::DtSimEntryUpdater::UpdateRate myRate
Definition: vrfDataProcessorInterface.h:194
static tbb::spin_mutex theEntryMapMutex
Definition: vrfDataProcessorInterface.h:52
Contains makVrv::DtSimEntryUpdater class.
Definition: vrfDataProcessorInterface.h:187
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:146
Base class to provide boost signal/slot management.
virtual Legion::UInt64 legionIdFromVantageId(makVrv::DtUniqueID lid) const override
bool myDiscoverClutterEntities
Definition: vrfDataProcessorInterface.h:204
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:53
virtual void forceObjectUpdate(makVrv::DtUniqueID)
DtStateDataManager * myStateDataManager
Definition: vrfDataProcessorInterface.h:172
UpdateGroupMap myRefreshRateGroups
Definition: vrfDataProcessorInterface.h:182
DtTimedSection myTimer
Definition: vrfDataProcessorInterface.h:176
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:197
Definition: vrfDataProcessorInterface.h:56
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:291
virtual void vantageIdMapped(makVrv::DtUniqueID, Legion::UInt64)
DtStateData * myStateData
Definition: vrfDataProcessorInterface.h:189
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73
std::set< makVrv::DtUniqueID > myUpdated
Definition: vrfDataProcessorInterface.h:170

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)