libmove3d-planners
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros Groups Pages
SaveContext.hpp
1 /*
2  * SaveContext.hpp
3  *
4  * Created on: Sep 11, 2009
5  * Author: jmainpri
6  */
7 
8 #ifndef SAVECONTEXT_HPP_
9 #define SAVECONTEXT_HPP_
10 
11 #include "../p3d/env.hpp"
12 #include "planner/planEnvironment.hpp"
13 
14 #include <iostream>
15 #include <vector>
16 #include <iterator>
17 #include <map>
18 
24 class SaveContext {
25 
26 public:
30  SaveContext();
31 
35  ~SaveContext();
36 
40  void clear();
41 
46  unsigned int getNumberStored();
47 
52  unsigned int saveCurrentEnvToStack();
53 
58  void switchCurrentEnvTo(unsigned int i);
59 
63  void deleteEnv(unsigned int i);
64 
69  void printVariables(unsigned int id);
70 
74  void printData(unsigned int i);
75 
79  std::vector<double>& getTime(int id) { return _Time.at(id); }
80 
84  void addTime(std::vector<double> time) { _Time.push_back(time); }
85 
89  std::map<Env::boolParameter, boolContainer*> copyMap( std::map<Env::boolParameter, boolContainer*> map );
90  std::map<Env::intParameter, intContainer*> copyMap( std::map<Env::intParameter, intContainer*> map );
91  std::map<Env::doubleParameter, doubleContainer*> copyMap( std::map<Env::doubleParameter, doubleContainer*> map );
92  std::map<Env::stringParameter, stringContainer*> copyMap( std::map<Env::stringParameter, stringContainer*> map );
93 
94 private:
95  std::vector< std::map<Env::boolParameter, boolContainer*> > _MapBool;
96  std::vector< std::map<Env::intParameter, intContainer*> > _MapInt;
97  std::vector< std::map<Env::doubleParameter, doubleContainer*> > _MapDouble;
98  std::vector< std::map<Env::stringParameter, stringContainer*> > _MapString;
99 
100  std::vector< std::vector<double> > _Time;
101 // std::vector< std::vector<Statistics*> > _Statistics;
102 };
103 
104 extern SaveContext storedContext;
105 
111 template <typename enumBool,
112  typename enumInt,
113  typename enumDouble,
114  typename enumString,
115  typename enumVector>
117 {
118 public:
119 
123  SaveParameterEnv(Parameters<enumBool,
124  enumInt,
125  enumDouble,
126  enumString,
127  enumVector>* env) : m_ParamEnv(env)
128  {
129  // clear();
130  // saveCurrentEnvToStack();
131  clear();
132  m_Time.clear();
133  }
134 
139  {
140  clear();
141  }
142 
146  void clear()
147  {
148  std::cout << "Deleting " << m_MapBool.size() << " context" << std::endl;
149 
150  m_MapBool.clear();
151  m_MapInt.clear();
152  m_MapDouble.clear();
153  m_MapString.clear();
154 
155  for(unsigned int i=0;i<m_Time.size();i++)
156  {
157  m_Time.at(i).clear();
158  }
159 
160  m_Time.clear();
161  }
162 
167  unsigned int getNumberStored()
168  {
169  return m_MapBool.size();
170  }
171 
176  unsigned int saveCurrentEnvToStack()
177  {
178  m_MapBool.push_back( copyMap(m_ParamEnv->getBoolMap()) );
179  m_MapInt.push_back( copyMap(m_ParamEnv->getIntMap()) );
180  m_MapDouble.push_back( copyMap(m_ParamEnv->getDoubleMap()) );
181  m_MapString.push_back( copyMap(m_ParamEnv->getStringMap()) );
182 
183  return getNumberStored();
184  }
185 
186 
191  void switchCurrentEnvTo(unsigned int i)
192  {
193  std::cout << "Switching to " << i << " context" << std::endl;
194  std::cout << " " << getNumberStored() << " are stored" << std::endl;
195 
196  for(typename std::map<enumBool,boolContainer*>::iterator iter = m_MapBool[i].begin();
197  iter != m_MapBool[i].end();
198  iter++)
199  {
200  m_ParamEnv->setBool(iter->first,iter->second->get());
201  }
202 
203  for(typename std::map<enumInt, intContainer*>::iterator iter = m_MapInt[i].begin();
204  iter != m_MapInt[i].end();
205  iter++)
206  {
207  m_ParamEnv->setInt(iter->first,iter->second->get());
208  }
209 
210  for(typename std::map<enumDouble, doubleContainer*>::iterator iter = m_MapDouble[i].begin();
211  iter != m_MapDouble[i].end();
212  iter++)
213  {
214  m_ParamEnv->setDouble(iter->first,iter->second->get());
215  }
216 
217 #ifdef QT_LIBRARY
218  for(typename std::map<enumString, stringContainer*>::iterator iter = m_MapString[i].begin();
219  iter != m_MapString[i].end();
220  iter++)
221  {
222  m_ParamEnv->setString(iter->first,iter->second->get());
223  }
224 #endif
225  }
226 
227 
231  void deleteEnv(unsigned int i)
232  {
233 
234  m_MapBool.erase ( m_MapBool.begin() + i );
235  m_MapInt.erase ( m_MapInt.begin() + i );
236  m_MapDouble.erase ( m_MapDouble.begin() + i );
237  m_MapString.erase ( m_MapString.begin() + i );
238  }
239 
244  void printVariables(unsigned int id)
245  {
246  std::cout << "Bool -------------------------------" << std::endl;
247 
248  typename std::map<enumBool, boolContainer*>::iterator iter1;
249  iter1 = m_MapBool[id].begin();
250 
251  for(; iter1 != m_MapBool[id].end(); iter1++)
252  {
253  std::cout << iter1->second->get() << std::endl;
254  }
255 
256 
257  std::cout << "Integers ---------------------------" << std::endl;
258  typename std::map<enumInt, intContainer*>::iterator iter2 = m_MapInt[id].begin();
259  // cout << "size " << d->getIntMap().size() << endl;
260 
261  for(; iter2 != m_MapInt[id].end(); iter2++)
262  {
263  std::cout << iter2->second->get() << std::endl;
264  }
265 
266  std::cout << "Doubles ----------------------------" << std::endl;
267  typename std::map<enumDouble, doubleContainer*>::iterator iter3 = m_MapDouble[id].begin();
268 
269  for(; iter3 != m_MapDouble[id].end(); iter3++)
270  {
271  std::cout << iter3->second->get() << std::endl;
272  }
273 
274 #ifdef QT_LIBRARY
275  std::cout << "String -----------------------------" << std::endl;
276  typename std::map<enumString, stringContainer*>::iterator iter4 = m_MapString[id].begin();
277 
278  for(; iter4 != m_MapString[id].end(); iter4++)
279  {
280  std::cout << iter4->second->get().toStdString() << std::endl;
281  }
282 #endif
283  std::cout << "------------ end --------------" << std::endl;
284  }
285 
289  void printData(unsigned int i)
290  {
291  printVariables(i);
292 
293  std::cout << "m_Map["<<i<<"]"<< std::endl;
294  }
295 
299  std::vector<double>& getTime(int id) { return m_Time.at(id); }
300 
304  void addTime(std::vector<double> time) { m_Time.push_back(time); }
305 
309  std::map<enumBool, boolContainer*> copyMap( std::map<enumBool, boolContainer*> myMap )
310  {
311  typename std::map<enumBool, boolContainer*>::iterator iter = myMap.begin();
312 
313  for(; iter != myMap.end(); iter++)
314  {
315  // cout << iter->second->get() << endl;
316  iter->second = new boolContainer(iter->second->get());
317  }
318 
319  return myMap;
320  }
321 
322 
323  std::map<enumInt, intContainer*> copyMap( std::map<enumInt, intContainer*> myMap )
324  {
325  typename std::map<enumInt, intContainer*>::iterator iter = myMap.begin();
326 
327  for(; iter != myMap.end(); iter++)
328  {
329  // cout << iter->second->get() << endl;
330  iter->second = new intContainer(iter->second->get());
331  }
332 
333  return myMap;
334  }
335 
336 
337  std::map<enumDouble, doubleContainer*> copyMap( std::map<enumDouble, doubleContainer*> myMap )
338  {
339  typename std::map<enumDouble, doubleContainer*>::iterator iter = myMap.begin();
340 
341  for(; iter != myMap.end(); iter++)
342  {
343  // cout << iter->second->get() << endl;
344  iter->second = new doubleContainer(iter->second->get());
345  }
346 
347  return myMap;
348  }
349 
350  std::map<enumString, stringContainer*> copyMap( std::map<enumString, stringContainer*> myMap )
351  {
352  typename std::map<enumString, stringContainer*>::iterator iter = myMap.begin();
353 
354  for(; iter != myMap.end(); iter++)
355  {
356  // cout << iter->second->get() << endl;
357 #ifdef QT_LIBRARY
358  iter->second = new stringContainer(iter->second->get());
359 #endif
360  }
361  return myMap;
362  }
363 
364 private:
365  Parameters< enumBool,
366  enumInt,
367  enumDouble,
368  enumString,
369  enumVector>* m_ParamEnv;
370 
371  std::vector< std::map<enumBool, boolContainer*> > m_MapBool;
372  std::vector< std::map<enumInt, intContainer*> > m_MapInt;
373  std::vector< std::map<enumDouble, doubleContainer*> > m_MapDouble;
374  std::vector< std::map<enumString, stringContainer*> > m_MapString;
375 
376  std::vector< std::vector<double> > m_Time;
377  // std::vector< std::vector<Statistics*> > _Statistics;
378 };
379 
380 extern SaveParameterEnv<
381 PlanParam::boolParameter,
382 PlanParam::intParameter,
383 PlanParam::doubleParameter,
384 PlanParam::stringParameter,
385 PlanParam::vectorParameter>* storedPlannerContext;
386 
387 #endif /* SAVECONTEXT_HPP_ */
Saves the context describe in an Env structure of one run and associates a Statistic Data structure...
Definition: SaveContext.hpp:24
unsigned int saveCurrentEnvToStack()
Saves Current Environment to Stack.
Definition: SaveContext.hpp:176
void clear()
Erases all contexts.
Definition: SaveContext.cpp:40
unsigned int getNumberStored()
returns the number of environments Stored in the data structures
Definition: SaveContext.cpp:57
void printVariables(unsigned int id)
Prints the variables of The environment.
Definition: SaveContext.cpp:81
SaveParameterEnv(Parameters< enumBool, enumInt, enumDouble, enumString, enumVector > *env)
Constructor.
Definition: SaveContext.hpp:123
std::map< Env::boolParameter, boolContainer * > copyMap(std::map< Env::boolParameter, boolContainer * > map)
Copy constructors of the 4 type of maps.
void switchCurrentEnvTo(unsigned int i)
Changes the Current Environment to a stored one.
Definition: SaveContext.cpp:123
~SaveParameterEnv()
Destructor.
Definition: SaveContext.hpp:138
unsigned int saveCurrentEnvToStack()
Saves Current Environment to Stack.
Definition: SaveContext.cpp:62
void addTime(std::vector< double > time)
Add Time Vector.
Definition: SaveContext.hpp:304
~SaveContext()
Destructor.
Definition: SaveContext.cpp:35
void printData(unsigned int i)
Print all variables of an environment.
Definition: SaveContext.cpp:73
std::vector< double > & getTime(int id)
Get Time Vector.
Definition: SaveContext.hpp:299
void clear()
Erases all contexts.
Definition: SaveContext.hpp:146
void addTime(std::vector< double > time)
Add Time Vector.
Definition: SaveContext.hpp:84
Saves the parameter environement described in an Env structure of one run and associates a Statistic ...
Definition: SaveContext.hpp:116
void deleteEnv(unsigned int i)
Delete Env.
Definition: SaveContext.cpp:159
unsigned int getNumberStored()
returns the number of environments Stored in the data structures
Definition: SaveContext.hpp:167
std::map< enumBool, boolContainer * > copyMap(std::map< enumBool, boolContainer * > myMap)
Copy constructors of the 4 type of maps.
Definition: SaveContext.hpp:309
void switchCurrentEnvTo(unsigned int i)
Changes the Current Environment to a stored one.
Definition: SaveContext.hpp:191
void printData(unsigned int i)
Print all variables of an environment.
Definition: SaveContext.hpp:289
std::vector< double > & getTime(int id)
Get Time Vector.
Definition: SaveContext.hpp:79
void printVariables(unsigned int id)
Prints the variables of The environment.
Definition: SaveContext.hpp:244
void deleteEnv(unsigned int i)
Delete Env.
Definition: SaveContext.hpp:231
SaveContext()
Constructor.
Definition: SaveContext.cpp:27