VR-Forces 4.1.1 Class Documentation
DtStateCacheManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2009 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 /*******************************************************************************
6 ** $RCSfile: DtStateCacheManager.h,v $ $Revision: 1.2 $ $State: Exp $
7 *******************************************************************************/
8 
11 
14 
15 #pragma once
16 
21 
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  {
45  myProcessor->signal_stateAdded.connect(boost::bind(&DtStateCacheManager::slot_stateAdded, this, _1, _2));
48  }
49 
51  {
52  myProcessor->signal_stateAdded.disconnect(boost::bind(&DtStateCacheManager::slot_stateAdded, this, _1, _2));
54  myProcessor->signal_stateRemoved.disconnect(boost::bind(&DtStateCacheManager::slot_stateRemoved, this, _1));
55  }
56 
57  void addIsModifiedCallbackCheck(const boost::function<bool (const _StateType& newState,
58  const _StateType& originalState)>& function)
59  {
60  myIsModifiedFunctions.push_back(function);
61  }
62 
64  {
65  typename std::map<makVrv::DtUniqueID, _StateType>::iterator iter;
66  iter = myMap.find(id);
67 
68  if (iter != myMap.end())
69  {
70  myMap.erase(iter);
71  }
72  }
73 
75  const makVrv::DtVrlinkSimulatedBaseState& incoming)
76  {
77  const _StateType& state = (const _StateType&)incoming;
78  myMap[id] = state;
79  }
80 
82  const makVrv::DtVrlinkSimulatedBaseState& incoming)
83  {
84  const _StateType& state = (const _StateType&)incoming;
85 
86  typename DtIsModifiedCallList::iterator iter =
87  myIsModifiedFunctions.begin();
88  typename std::map<makVrv::DtUniqueID, _StateType>::const_iterator
89  cacheIter = myMap.find(id);
90 
91  while (iter != myIsModifiedFunctions.end())
92  {
93  if ((*iter)(state, cacheIter->second))
94  {
95  myMap[id] = state;
97  return;
98  }
99 
100  ++iter;
101  }
102  }
103 
104  protected:
105  std::map<makVrv::DtUniqueID, _StateType> myMap;
106 
107  typedef std::vector<boost::function<bool (const _StateType& newState,
108  const _StateType& originalState)> > DtIsModifiedCallList;
109 
112  };
113 
114  class DtEntityStateCacheManager : public DtStateCacheManager<makVrv::DtVrlinkSimulatedEntityState>
115  {
116  public:
118  : DtStateCacheManager<makVrv::DtVrlinkSimulatedEntityState>(i)
119  {
125  }
126 
127  protected:
129  const makVrv::DtVrlinkSimulatedEntityState& cached) const
130  {
131  return (newState.myAttachedToId != cached.myAttachedToId);
132  }
133 
135  const makVrv::DtVrlinkSimulatedEntityState& cached) const
136  {
137  return (newState.myForce != cached.myForce);
138  }
139 
141  const makVrv::DtVrlinkSimulatedEntityState& cached) const
142  {
143  return (newState.myMarkingText != cached.myMarkingText);
144  }
145 
147  const makVrv::DtVrlinkSimulatedEntityState& cached) const
148  {
149  return (newState.myGlobalId != cached.myGlobalId);
150  }
151 
154  {
155  DtAppearance app1(DtEntityType(newState.myEntityType.c_str()));
156 
157  app1.setAppearance(newState.myAppearance);
158 
159  DtAppearance app2(DtEntityType(state.myEntityType.c_str()));
160 
161  app2.setAppearance(state.myAppearance);
162 
163  bool dest1 = (app1.damageState() == DtDamageDestroyed);
164  bool dest2 = (app2.damageState() == DtDamageDestroyed);
165 
166  return (dest1 != dest2);
167  }
168  };
169 
170  class DtEnvironmentProcessCacheManager : public DtStateCacheManager<DtVrlinkSimulatedEnvironmentProcess>
171  {
172  public:
175  {
177  }
178 
179  protected:
181  const DtVrlinkSimulatedEnvironmentProcess& cached) const
182  {
183  return (newState != cached);
184  }
185  };
186 
187  class DtExtendedStateDataCacheManager : public DtStateCacheManager<DtExtendedStateData>
188  {
189  public:
192  {
194  }
195 
196  protected:
197  bool checkAll(const DtExtendedStateData& newState,
198  const DtExtendedStateData& cached) const
199  {
200  return (newState != cached);
201  }
202  };
203 
204  class DtIffStateCacheManager : public DtStateCacheManager<DtIffStateData>
205  {
206  public:
209  {
211  }
212 
213  protected:
214  bool checkAll(const DtIffStateData& newState,
215  const DtIffStateData& cached) const
216  {
217  return (newState.myStateData != cached.myStateData);
218  }
219  };
220 
221  class DtAggregateStateCacheManager : public DtStateCacheManager<DtVrlinkSimulatedAggregateState>
222  {
223  public:
226  {
235  }
236 
237  protected:
239  const DtVrlinkSimulatedAggregateState& state)
240  {
241  bool dest1 = (newState.myAppearance == DtDamageDestroyed);
242  bool dest2 = (state.myAppearance == DtDamageDestroyed);
243 
244  return (dest1 != dest2);
245  }
246 
248  const DtVrlinkSimulatedAggregateState& state)
249  {
250  int numberOfAggs = newState.mySubAggregates.size();
251  int i;
252  DtGlobalObjectDesignator id;
253  std::string sId;
254  int curAggLimit = state.mySubAggregates.size();
255 
256  if (numberOfAggs != curAggLimit)
257  {
258  return true;
259  }
260 
261  for (i = 0; i < numberOfAggs; i++)
262  {
263  if (state.mySubAggregates[i] != newState.mySubAggregates[i])
264  {
265  return true;
266  }
267  }
268 
269  return false;
270  }
271 
273  const DtVrlinkSimulatedAggregateState& state)
274  {
275  int numberOfAggs = newState.mySubEntities.size();
276  int i;
277  DtGlobalObjectDesignator id;
278  std::string sId;
279  int curAggLimit = state.mySubEntities.size();
280 
281  if (numberOfAggs != curAggLimit)
282  {
283  return true;
284  }
285 
286  for (i = 0; i < numberOfAggs; i++)
287  {
288  if (state.mySubEntities[i] != newState.mySubEntities[i])
289  {
290  return true;
291  }
292  }
293 
294  return false;
295  }
296 
298  const DtVrlinkSimulatedAggregateState& cached) const
299  {
300  return (newState.myAttachedToId != cached.myAttachedToId);
301  }
302 
304  const DtVrlinkSimulatedAggregateState& cached) const
305  {
306  return (newState.myForce != cached.myForce);
307  }
308 
310  const DtVrlinkSimulatedAggregateState& cached) const
311  {
312  return (newState.myGlobalId != cached.myGlobalId);
313  }
314 
316  const DtVrlinkSimulatedAggregateState& cached) const
317  {
318  return (newState.myMarkingText != cached.myMarkingText);
319  }
320 
322  const DtVrlinkSimulatedAggregateState& cached) const
323  {
324  return (newState.myAggregateState != cached.myAggregateState);
325  }
326  };
327  }
328 }

Document ID: Generated on Mon Apr 8 19:24:01 EDT 2013 from SVN revision 125877
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)