VR-Forces 4.3.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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 
19 
21 #include <vrvCore/DtUniqueID.h>
22 #include <vrvCore/DtEntityState.h>
23 
25 
26 #include <map>
27 
28 #include <boost/function.hpp>
29 #include <boost/bind.hpp>
30 
31 #include <vlpi/appearance.h>
32 
33 namespace makVrf
34 {
35  namespace VRF_PROTOCOL_NAMESPACE
36  {
37  template <typename _StateType>
39  {
40  public:
42  : myProcessor(iface)
43  {
47  }
48 
50  {
51  }
52 
53  void enable()
54  {
56  }
57 
58  void disable()
59  {
61  }
62 
63  void addIsModifiedCallbackCheck(const boost::function<bool (const _StateType& newState,
64  const _StateType& originalState)>& function)
65  {
66  myIsModifiedFunctions.push_back(function);
67  }
68 
70  {
71  typename std::map<makVrv::DtUniqueID, _StateType>::iterator iter;
72  iter = myMap.find(id);
73 
74  if (iter != myMap.end())
75  {
76  myMap.erase(iter);
77  }
78  }
79 
81  const makVrv::DtSimState& incoming)
82  {
83  const _StateType& state = static_cast<const _StateType&>(incoming);
84  myMap[id] = state;
85  }
86 
88  const makVrv::DtSimState& incoming)
89  {
90  const _StateType& state = static_cast<const _StateType&>(incoming);
91 
92  typename DtIsModifiedCallList::iterator iter =
93  myIsModifiedFunctions.begin();
94  typename std::map<makVrv::DtUniqueID, _StateType>::const_iterator
95  cacheIter = myMap.find(id);
96 
97  while (iter != myIsModifiedFunctions.end())
98  {
99  if ((*iter)(state, cacheIter->second))
100  {
101  myMap[id] = state;
103  return;
104  }
105 
106  ++iter;
107  }
108  }
109 
110  protected:
111  std::map<makVrv::DtUniqueID, _StateType> myMap;
112 
113  typedef std::vector<boost::function<bool (const _StateType& newState,
114  const _StateType& originalState)> > DtIsModifiedCallList;
115 
119  };
120 
121  class VRF_PROTOCOL_EXPORT DtEntityStateCacheManager : public DtStateCacheManager<makVrv::DtVrlinkSimulatedEntityState>
122  {
123  public:
125  : DtStateCacheManager<makVrv::DtVrlinkSimulatedEntityState>(i)
126  {
127  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkParentId, this, _1, _2));
128  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkGlobalId, this, _1, _2));
129  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkMarkingText, this, _1, _2));
130  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkAppearance, this, _1, _2));
131  addIsModifiedCallbackCheck(boost::bind(&DtEntityStateCacheManager::checkForceId, this, _1, _2));
132  }
133 
134  protected:
135  bool checkParentId(const makVrv::DtVrlinkSimulatedEntityState& newState,
136  const makVrv::DtVrlinkSimulatedEntityState& cached) const
137  {
138  return (newState.myAttachedToId != cached.myAttachedToId);
139  }
140 
141  bool checkForceId(const makVrv::DtVrlinkSimulatedEntityState& newState,
142  const makVrv::DtVrlinkSimulatedEntityState& cached) const
143  {
144  return (newState.myForce != cached.myForce);
145  }
146 
147  bool checkMarkingText(const makVrv::DtVrlinkSimulatedEntityState& newState,
148  const makVrv::DtVrlinkSimulatedEntityState& cached) const
149  {
150  return (newState.myMarkingText != cached.myMarkingText);
151  }
152 
153  bool checkGlobalId(const makVrv::DtVrlinkSimulatedEntityState& newState,
154  const makVrv::DtVrlinkSimulatedEntityState& cached) const
155  {
156  return (newState.myGlobalId != cached.myGlobalId);
157  }
158 
159  bool checkAppearance(const makVrv::DtVrlinkSimulatedEntityState& newState,
161  {
162  return (newState.myAppearance != state.myAppearance);
163  }
164  };
165 
166  class VRF_PROTOCOL_EXPORT DtEnvironmentProcessStateCacheManager : public DtStateCacheManager<DtVrlinkSimulatedEnvironmentProcess>
167  {
168  public:
171  {
172  addIsModifiedCallbackCheck(boost::bind(&DtEnvironmentProcessStateCacheManager::checkAll, this, _1, _2));
173  }
174 
175  protected:
176  bool checkAll(const DtVrlinkSimulatedEnvironmentProcess& newState,
177  const DtVrlinkSimulatedEnvironmentProcess& cached) const
178  {
179  return (newState != cached);
180  }
181  };
182 
183  class VRF_PROTOCOL_EXPORT DtWeatherStateCacheManager : public DtStateCacheManager<DtVrlinkSimulatedWeatherState>
184  {
185  public:
188  {
189  addIsModifiedCallbackCheck(boost::bind(&DtWeatherStateCacheManager::checkAll, this, _1, _2));
190  }
191 
192  protected:
193  bool checkAll(const DtVrlinkSimulatedWeatherState& newState,
194  const DtVrlinkSimulatedWeatherState& cached) const
195  {
196  return (newState != cached);
197  }
198  };
199 
201  {
202  public:
205  {
206  addIsModifiedCallbackCheck(boost::bind(&DtExtendedStateDataCacheManager::checkAll, this, _1, _2));
207  }
208 
209  protected:
210  bool checkAll(const DtExtendedStateData& newState,
211  const DtExtendedStateData& cached) const
212  {
213  return (newState != cached);
214  }
215  };
216 
218  {
219  public:
222  {
223  addIsModifiedCallbackCheck(boost::bind(&DtObjectStateStateCacheManager::checkEchelonId, this, _1, _2));
224  }
225 
226  protected:
227  bool checkEchelonId(const DtVrfObjectDataState& newState,
228  const DtVrfObjectDataState& state)
229  {
230  return (newState.myEchelonIdString != state.myEchelonIdString);
231  }
232  };
233 
234  class VRF_PROTOCOL_EXPORT DtAggregateStateCacheManager : public DtStateCacheManager<DtVrlinkNetworkUpdateSimulatedAggregateState>
235  {
236  public:
239  {
240  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkParentId, this, _1, _2));
241  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkGlobalId, this, _1, _2));
242  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkAggregateState, this, _1, _2));
243  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkMarkingText, this, _1, _2));
244  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkSubAggregates, this, _1, _2));
245  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkSubEntities, this, _1, _2));
246  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkAppearance, this, _1, _2));
247  addIsModifiedCallbackCheck(boost::bind(&DtAggregateStateCacheManager::checkForceId, this, _1, _2));
248  }
249 
250  protected:
251  bool checkAppearance(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
253  {
254  return (newState.myAppearance != state.myAppearance);
255  }
256 
257  bool checkSubAggregates(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
259  {
260  int numberOfAggs = newState.mySubAggregates.size();
261  int curAggLimit = state.mySubAggregates.size();
262 
263  if (numberOfAggs != curAggLimit)
264  {
265  return true;
266  }
267 
268  for (int i = 0; i < numberOfAggs; i++)
269  {
270  if (state.mySubAggregates[i] != newState.mySubAggregates[i])
271  {
272  return true;
273  }
274  }
275 
276  return false;
277  }
278 
279  bool checkSubEntities(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
281  {
282  int numberOfAggs = newState.mySubEntities.size();
283  int curAggLimit = state.mySubEntities.size();
284 
285  if (numberOfAggs != curAggLimit)
286  {
287  return true;
288  }
289 
290  for (int i = 0; i < numberOfAggs; i++)
291  {
292  if (state.mySubEntities[i] != newState.mySubEntities[i])
293  {
294  return true;
295  }
296  }
297 
298  return false;
299  }
300 
301  bool checkParentId(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
303  {
304  return (newState.myAttachedToId != cached.myAttachedToId);
305  }
306 
307  bool checkForceId(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
309  {
310  return (newState.myForce != cached.myForce);
311  }
312 
313  bool checkGlobalId(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
315  {
316  return (newState.myGlobalId != cached.myGlobalId);
317  }
318 
319  bool checkMarkingText(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
321  {
322  return (newState.myMarkingText != cached.myMarkingText);
323  }
324 
325  bool checkAggregateState(const DtVrlinkNetworkUpdateSimulatedAggregateState& newState,
327  {
328  return (newState.myAggregateState != cached.myAggregateState);
329  }
330  };
331  }
332 }

Document ID: Generated on Wed Jul 29 00:55:00 EDT 2015 from SVN revision 155257
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)