VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
stateCacheManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
11 
12 #pragma once
13 
20 
22 #include <vrvCore/DtUniqueID.h>
23 #include <vrvCore/DtEntityState.h>
24 
26 
27 #include <map>
28 
29 #include <boost/function.hpp>
30 #include <boost/bind.hpp>
31 
32 #include <vlpi/appearance.h>
33 
34 namespace makVrf
35 {
36  namespace VRF_PROTOCOL_NAMESPACE
37  {
38  template <typename _StateType>
40  {
41  public:
43  : myProcessor(iface)
44  {
48  }
49 
51  {
52  }
53 
54  void enable()
55  {
57  }
58 
59  void disable()
60  {
62  }
63 
64  void addIsModifiedCallbackCheck(const boost::function<bool (const _StateType& newState,
65  const _StateType& originalState)>& function)
66  {
67  myIsModifiedFunctions.push_back(function);
68  }
69 
71  {
72  typename std::map<makVrv::DtUniqueID, _StateType>::iterator iter;
73  iter = myMap.find(id);
74 
75  if (iter != myMap.end())
76  {
77  myMap.erase(iter);
78  }
79  }
80 
82  const makVrv::DtSimState& incoming)
83  {
84  const _StateType& state = static_cast<const _StateType&>(incoming);
85  myMap[id] = state;
86  }
87 
89  const makVrv::DtSimState& incoming)
90  {
91  const _StateType& state = static_cast<const _StateType&>(incoming);
92 
93  typename DtIsModifiedCallList::iterator iter =
94  myIsModifiedFunctions.begin();
95  typename std::map<makVrv::DtUniqueID, _StateType>::const_iterator
96  cacheIter = myMap.find(id);
97 
98  while (iter != myIsModifiedFunctions.end())
99  {
100  if ((*iter)(state, cacheIter->second))
101  {
102  myMap[id] = state;
104  return;
105  }
106 
107  ++iter;
108  }
109  }
110 
111  protected:
112  std::map<makVrv::DtUniqueID, _StateType> myMap;
113 
114  typedef std::vector<boost::function<bool (const _StateType& newState,
115  const _StateType& originalState)> > DtIsModifiedCallList;
116 
120  };
121 
122  class VRF_PROTOCOL_EXPORT DtEntityStateCacheManager : public DtStateCacheManager<makVrv::DtVrlinkSimulatedEntityState>
123  {
124  public:
126  : DtStateCacheManager<makVrv::DtVrlinkSimulatedEntityState>(i)
127  {
128  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkParentId, this, _1, _2));
129  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkGlobalId, this, _1, _2));
130  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkMarkingText, this, _1, _2));
131  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkAppearance, this, _1, _2));
132  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkForceId, this, _1, _2));
133  }
134 
135  protected:
136  bool checkParentId(const makVrv::DtVrlinkSimulatedEntityState& newState,
137  const makVrv::DtVrlinkSimulatedEntityState& cached) const
138  {
139  return (newState.myAttachedToId != cached.myAttachedToId);
140  }
141 
142  bool checkForceId(const makVrv::DtVrlinkSimulatedEntityState& newState,
143  const makVrv::DtVrlinkSimulatedEntityState& cached) const
144  {
145  return (newState.myForce != cached.myForce);
146  }
147 
148  bool checkMarkingText(const makVrv::DtVrlinkSimulatedEntityState& newState,
149  const makVrv::DtVrlinkSimulatedEntityState& cached) const
150  {
151  return (newState.myMarkingText != cached.myMarkingText);
152  }
153 
154  bool checkGlobalId(const makVrv::DtVrlinkSimulatedEntityState& newState,
155  const makVrv::DtVrlinkSimulatedEntityState& cached) const
156  {
157  return (newState.myGlobalId != cached.myGlobalId);
158  }
159 
160  bool checkAppearance(const makVrv::DtVrlinkSimulatedEntityState& newState,
162  {
163  return (newState.myAppearance != state.myAppearance);
164  }
165  };
166 
167  class VRF_PROTOCOL_EXPORT DtEnvironmentProcessStateCacheManager : public DtStateCacheManager<DtVrlinkNetworkUpdateSimulatedEnvironmentProcess>
168  {
169  public:
172  {
173  addIsModifiedCallbackCheck(boost::bind(&DtEnvironmentProcessStateCacheManager::checkAll, this, _1, _2));
174  }
175 
176  protected:
179  {
180  return (newState != cached);
181  }
182  };
183 
184  class VRF_PROTOCOL_EXPORT DtWeatherStateCacheManager : public DtStateCacheManager<DtVrlinkSimulatedWeatherState>
185  {
186  public:
189  {
190  addIsModifiedCallbackCheck(boost::bind(&DtWeatherStateCacheManager::checkAll, this, _1, _2));
191  }
192 
193  protected:
194  bool checkAll(const DtVrlinkSimulatedWeatherState& newState,
195  const DtVrlinkSimulatedWeatherState& cached) const
196  {
197  return (newState != cached);
198  }
199  };
200 
201  class VRF_PROTOCOL_EXPORT DtCloudLayerStateCacheManager : public DtStateCacheManager<DtVrlinkSimulatedCloudLayerState>
202  {
203  public:
206  {
207  addIsModifiedCallbackCheck(boost::bind(&DtCloudLayerStateCacheManager::checkAll, this, _1, _2));
208  }
209 
210  protected:
211  bool checkAll(const DtVrlinkSimulatedCloudLayerState& newState,
212  const DtVrlinkSimulatedCloudLayerState& cached) const
213  {
214  return (newState != cached);
215  }
216  };
217 
219  {
220  public:
223  {
224  addIsModifiedCallbackCheck(boost::bind(&DtExtendedStateDataCacheManager::checkAll, this, _1, _2));
225  }
226 
227  protected:
228  bool checkAll(const DtExtendedStateData& newState,
229  const DtExtendedStateData& cached) const
230  {
231  return (newState != cached);
232  }
233  };
234 
235  class VRF_PROTOCOL_EXPORT DtObjectStateStateCacheManager : public DtStateCacheManager<DtVrfNetworkUpdateObjectDataState>
236  {
237  public:
240  {
241  addIsModifiedCallbackCheck(boost::bind(&DtObjectStateStateCacheManager::checkEchelonId, this, _1, _2));
242  }
243 
244  protected:
245  bool checkEchelonId(const DtVrfNetworkUpdateObjectDataState& newState,
247  {
248  return (newState.myEchelonIdString != state.myEchelonIdString);
249  }
250  };
251 
252  class VRF_PROTOCOL_EXPORT DtAggregateStateCacheManager : public DtStateCacheManager<DtVrlinkNetworkUpdateSimulatedAggregateState>
253  {
254  public:
257  {
258  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkParentId, this, _1, _2));
259  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkGlobalId, this, _1, _2));
260  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkAggregateState, this, _1, _2));
261  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkMarkingText, this, _1, _2));
262  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkSubAggregates, this, _1, _2));
263  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkSubEntities, this, _1, _2));
264  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkAppearance, this, _1, _2));
265  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkForceId, this, _1, _2));
266  }
267 
268  protected:
269  bool checkAppearance(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
271  {
272  return (newState.myAppearance != state.myAppearance);
273  }
274 
275  bool checkSubAggregates(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
277  {
278  int numberOfAggs = newState.mySubAggregates.size();
279  int curAggLimit = state.mySubAggregates.size();
280 
281  if (numberOfAggs != curAggLimit)
282  {
283  return true;
284  }
285 
286  for (int i = 0; i < numberOfAggs; i++)
287  {
288  if (state.mySubAggregates[i] != newState.mySubAggregates[i])
289  {
290  return true;
291  }
292  }
293 
294  return false;
295  }
296 
297  bool checkSubEntities(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
299  {
300  int numberOfAggs = newState.mySubEntities.size();
301  int curAggLimit = state.mySubEntities.size();
302 
303  if (numberOfAggs != curAggLimit)
304  {
305  return true;
306  }
307 
308  for (int i = 0; i < numberOfAggs; i++)
309  {
310  if (state.mySubEntities[i] != newState.mySubEntities[i])
311  {
312  return true;
313  }
314  }
315 
316  return false;
317  }
318 
319  bool checkParentId(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
321  {
322  return (newState.myAttachedToId != cached.myAttachedToId);
323  }
324 
325  bool checkForceId(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
327  {
328  return (newState.myForce != cached.myForce);
329  }
330 
331  bool checkGlobalId(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
333  {
334  return (newState.myGlobalId != cached.myGlobalId);
335  }
336 
337  bool checkMarkingText(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
339  {
340  return (newState.myMarkingText != cached.myMarkingText);
341  }
342 
343  bool checkAggregateState(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
345  {
346  return (newState.myAggregateState != cached.myAggregateState);
347  }
348  };
349  }
350 }

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)