ImmediateTreeDataKernels.h
Go to the documentation of this file.
1 #ifndef GfxTL__IMMEDIATETREEDATAKERNELS_HEADER__
2 #define GfxTL__IMMEDIATETREEDATAKERNELS_HEADER__
3 #include <iterator>
4 
5 #include <GfxTL/Swap.h>
6 
7 namespace GfxTL
8 {
9  // ImmediateTreeDataKernels let the tree operate directly on the data,
10  // i.e. the data can be reordered to accomodate the tree cell structure.
11  // Therefore a const DataT cannot be accepted.
12  // There are two possibilities how the kernels maintain the data. The
13  // first option makes the data a member of the strategy itself.
14  // The second option operates on a range of random access iterators.
15  // The two options are implemented as two different Kernels
16  // ImmediateMemberTreeDataKernel is a realization of the first possibility
17  // ImmediateIteratorTreeDataKernel implements the second one
18 
19  template <class DataT>
21  {
22  public:
23  typedef typename DataT::value_type value_type;
24  typedef typename DataT::size_type HandleType;
26  typedef typename DataT::iterator iterator;
27  typedef typename DataT::const_iterator const_iterator;
28 
29  DataT&
31  {
32  return m_data;
33  }
34 
35  const DataT&
36  ContainedData() const
37  {
38  return m_data;
39  }
40 
43  {
44  return h;
45  }
46 
47  value_type&
49  {
50  return m_data.at(s);
51  }
52 
53  const value_type&
55  {
56  return m_data.at(s);
57  }
58 
59  value_type&
60  back()
61  {
62  return m_data.back();
63  }
64 
65  const value_type&
66  back() const
67  {
68  return m_data.back();
69  }
70 
71  iterator
73  {
74  return m_data.begin();
75  }
76 
77  iterator
78  end()
79  {
80  return m_data.end();
81  }
82 
84  begin() const
85  {
86  return m_data.begin();
87  }
88 
90  end() const
91  {
92  return m_data.end();
93  }
94 
95  size_t
96  size() const
97  {
98  return m_data.size();
99  }
100 
101  HandleType
102  BeginHandle() const
103  {
104  return 0;
105  }
106 
107  HandleType
108  EndHandle() const
109  {
110  return size();
111  }
112 
113  protected:
114  void
116  {
117  Swap(a, b, &m_data);
118  }
119 
120  void
122  {
123  /*
124  value_type v = back();
125  std::copy_backward(begin() + range.second - 1, end() - 1, end());
126  at(range.second - 1) = v;
127  */
128  }
129 
130  void
132  {
133  m_data.erase(m_data.begin() + s);
134  }
135 
136  private:
137  DataT m_data;
138  };
139 
140  template <class DataT>
142  {
143  public:
144  typedef typename DataT::value_type value_type;
145  typedef typename DataT::size_type HandleType;
147  typedef typename DataT::iterator iterator;
148  typedef typename DataT::const_iterator const_iterator;
149 
150  void
152  {
153  m_data = data;
154  }
155 
156  DataT&
158  {
159  return *m_data;
160  }
161 
162  const DataT&
164  {
165  return *m_data;
166  }
167 
168  DereferencedType
170  {
171  return h;
172  }
173 
174  value_type&
176  {
177  return m_data->at(s);
178  }
179 
180  const value_type&
182  {
183  return m_data->at(s);
184  }
185 
186  value_type&
188  {
189  return m_data->back();
190  }
191 
192  const value_type&
193  back() const
194  {
195  return m_data->back();
196  }
197 
198  iterator
200  {
201  return m_data->begin();
202  }
203 
204  iterator
205  end()
206  {
207  return m_data->end();
208  }
209 
210  const_iterator
211  begin() const
212  {
213  return m_data->begin();
214  }
215 
216  const_iterator
217  end() const
218  {
219  return m_data->end();
220  }
221 
222  size_t
223  size() const
224  {
225  return m_data->size();
226  }
227 
228  HandleType
229  BeginHandle() const
230  {
231  return 0;
232  }
233 
234  HandleType
235  EndHandle() const
236  {
237  return size();
238  }
239 
240  protected:
241  void
243  {
244  Swap(a, b, m_data);
245  }
246 
247  void
249  {
250  /*value_type v = back();
251  std::copy_backward(begin() + range.second - 1, end() - 1, end());
252  at(range.second - 1) = v;*/
253  }
254 
255  void
257  {
258  m_data->erase(m_data->begin() + s);
259  }
260 
261  private:
262  DataT* m_data;
263  };
264 
265  template <class DataT>
267  {
268  public:
269  typedef typename DataT::value_type value_type;
270  typedef typename DataT::size_type HandleType;
272  typedef typename DataT::iterator iterator;
273  typedef typename DataT::const_iterator const_iterator;
274 
275  void
277  {
278  m_data = data;
279  }
280 
281  void
283  {
284  m_beginRange = begin;
285  m_endRange = end;
286  }
287 
288  DataT&
290  {
291  return *m_data;
292  }
293 
294  const DataT&
296  {
297  return *m_data;
298  }
299 
302  {
303  return h;
304  }
305 
306  value_type&
308  {
309  return m_data->at(s);
310  }
311 
312  const value_type&
314  {
315  return m_data->at(s);
316  }
317 
318  value_type&
320  {
321  return m_data->begin() + m_endRange - 1;
322  }
323 
324  const value_type&
325  back() const
326  {
327  return m_data->begin() + m_endRange - 1;
328  }
329 
330  iterator
332  {
333  return m_data->begin() + m_beginRange;
334  }
335 
336  iterator
337  end()
338  {
339  return m_data->begin() + m_endRange;
340  }
341 
343  begin() const
344  {
345  return m_data->begin() + m_beginRange;
346  }
347 
349  end() const
350  {
351  return m_data->begin() + m_endRange;
352  }
353 
354  HandleType
355  size() const
356  {
357  return m_endRange - m_beginRange;
358  }
359 
360  HandleType
361  BeginHandle() const
362  {
363  return m_beginRange;
364  }
365 
366  HandleType
367  EndHandle() const
368  {
369  return m_endRange;
370  }
371 
372  protected:
373  void
375  {
376  Swap(a, b, m_data);
377  }
378 
379  void
381  {
382  /*value_type v = back();
383  std::copy_backward(begin() + range.second - 1, end() - 1, end());
384  at(range.second - 1) = v;*/
385  }
386 
387  void
389  {
390  m_data->erase(m_data->begin() + s);
391  }
392 
393  private:
394  DataT* m_data;
395  HandleType m_beginRange;
396  HandleType m_endRange;
397  };
398 
399  // this kernel does not support insertion or removal
400  template <class IteratorT>
402  {
403  public:
404  typedef typename std::iterator_traits<IteratorT>::value_type value_type;
405  typedef typename std::iterator_traits<IteratorT>::reference reference;
406  typedef size_t HandleType;
408  typedef IteratorT iterator;
409  typedef IteratorT const_iterator;
410 
411  void
412  Begin(IteratorT begin)
413  {
414  m_begin = begin;
415  }
416 
417  void
418  End(IteratorT end)
419  {
420  m_end = end;
421  }
422 
425  {
426  return h;
427  }
428 
429  reference
431  {
432  return m_begin[s];
433  }
434 
435  reference
437  {
438  return m_begin[s];
439  }
440 
441  reference
443  {
444  return *(m_end - 1);
445  }
446 
447  reference
448  back() const
449  {
450  return *(m_end - 1);
451  }
452 
453  iterator
455  {
456  return m_begin;
457  }
458 
459  iterator
460  end()
461  {
462  return m_end;
463  }
464 
466  begin() const
467  {
468  return m_begin;
469  }
470 
472  end() const
473  {
474  return m_end;
475  }
476 
477  size_t
478  size() const
479  {
480  return m_end - m_begin;
481  }
482 
483  HandleType
484  BeginHandle() const
485  {
486  return 0;
487  }
488 
489  HandleType
490  EndHandle() const
491  {
492  return size();
493  }
494 
495  protected:
496  void
498  {
499  using namespace std;
500  swap(at(a), at(b));
501  }
502 
503  private:
504  IteratorT m_begin;
505  IteratorT m_end;
506  };
507 }; // namespace GfxTL
508 
509 #endif
GfxTL::ImmediateRangeTreeDataKernel::ContainedData
const DataT & ContainedData() const
Definition: ImmediateTreeDataKernels.h:295
GfxTL::ImmediateIteratorTreeDataKernel::End
void End(IteratorT end)
Definition: ImmediateTreeDataKernels.h:418
GfxTL::ImmediateMemberTreeDataKernel::begin
const_iterator begin() const
Definition: ImmediateTreeDataKernels.h:84
GfxTL::ImmediateMemberTreeDataKernel::ContainedData
const DataT & ContainedData() const
Definition: ImmediateTreeDataKernels.h:36
GfxTL::ImmediateIteratorTreeDataKernel::back
reference back()
Definition: ImmediateTreeDataKernels.h:442
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::at
const value_type & at(DereferencedType s) const
Definition: ImmediateTreeDataKernels.h:181
GfxTL::ImmediateRangeTreeDataKernel::end
const_iterator end() const
Definition: ImmediateTreeDataKernels.h:349
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::begin
const_iterator begin() const
Definition: ImmediateTreeDataKernels.h:211
GfxTL::ImmediateMemberTreeDataKernel::value_type
DataT::value_type value_type
Definition: ImmediateTreeDataKernels.h:23
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::Remove
void Remove(DereferencedType s)
Definition: ImmediateTreeDataKernels.h:256
GfxTL::ImmediateRangeTreeDataKernel::size
HandleType size() const
Definition: ImmediateTreeDataKernels.h:355
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::begin
iterator begin()
Definition: ImmediateTreeDataKernels.h:199
GfxTL::ImmediateMemberTreeDataKernel::at
const value_type & at(DereferencedType s) const
Definition: ImmediateTreeDataKernels.h:54
GfxTL::ImmediateIteratorTreeDataKernel
Definition: ImmediateTreeDataKernels.h:401
GfxTL::ImmediateRangeTreeDataKernel::back
const value_type & back() const
Definition: ImmediateTreeDataKernels.h:325
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::EndHandle
HandleType EndHandle() const
Definition: ImmediateTreeDataKernels.h:235
GfxTL::ImmediateMemberTreeDataKernel::Remove
void Remove(DereferencedType s)
Definition: ImmediateTreeDataKernels.h:131
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::iterator
DataT::iterator iterator
Definition: ImmediateTreeDataKernels.h:147
GfxTL::ImmediateMemberTreeDataKernel::begin
iterator begin()
Definition: ImmediateTreeDataKernels.h:72
GfxTL::ImmediateRangeTreeDataKernel::begin
iterator begin()
Definition: ImmediateTreeDataKernels.h:331
GfxTL::ImmediateIteratorTreeDataKernel::BeginHandle
HandleType BeginHandle() const
Definition: ImmediateTreeDataKernels.h:484
GfxTL::ImmediateIteratorTreeDataKernel::DereferencedType
HandleType DereferencedType
Definition: ImmediateTreeDataKernels.h:407
GfxTL::ImmediateMemberTreeDataKernel::DereferencedType
HandleType DereferencedType
Definition: ImmediateTreeDataKernels.h:25
Swap.h
GfxTL::ImmediateIteratorTreeDataKernel::begin
iterator begin()
Definition: ImmediateTreeDataKernels.h:454
GfxTL::ImmediateMemberTreeDataKernel::back
value_type & back()
Definition: ImmediateTreeDataKernels.h:60
GfxTL::ImmediateIteratorTreeDataKernel::Begin
void Begin(IteratorT begin)
Definition: ImmediateTreeDataKernels.h:412
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::back
const value_type & back() const
Definition: ImmediateTreeDataKernels.h:193
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::SwapHandles
void SwapHandles(HandleType a, HandleType b)
Definition: ImmediateTreeDataKernels.h:242
GfxTL::ImmediateIteratorTreeDataKernel::end
const_iterator end() const
Definition: ImmediateTreeDataKernels.h:472
GfxTL::ImmediateRangeTreeDataKernel::BeginHandle
HandleType BeginHandle() const
Definition: ImmediateTreeDataKernels.h:361
GfxTL::ImmediateRangeTreeDataKernel::SwapHandles
void SwapHandles(HandleType a, HandleType b)
Definition: ImmediateTreeDataKernels.h:374
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::BeginHandle
HandleType BeginHandle() const
Definition: ImmediateTreeDataKernels.h:229
GfxTL::ImmediateMemberTreeDataKernel::SwapHandles
void SwapHandles(HandleType a, HandleType b)
Definition: ImmediateTreeDataKernels.h:115
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::end
iterator end()
Definition: ImmediateTreeDataKernels.h:205
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::DereferencedType
HandleType DereferencedType
Definition: ImmediateTreeDataKernels.h:146
GfxTL::ImmediateIteratorTreeDataKernel::EndHandle
HandleType EndHandle() const
Definition: ImmediateTreeDataKernels.h:490
GfxTL::ImmediateMemberTreeDataKernel::const_iterator
DataT::const_iterator const_iterator
Definition: ImmediateTreeDataKernels.h:27
armarx::armem::client::util::swap
void swap(SubscriptionHandle &first, SubscriptionHandle &second)
Definition: SubscriptionHandle.cpp:66
GfxTL::ImmediateRangeTreeDataKernel::DereferencedType
HandleType DereferencedType
Definition: ImmediateTreeDataKernels.h:271
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::Dereference
DereferencedType Dereference(HandleType h) const
Definition: ImmediateTreeDataKernels.h:169
GfxTL::ImmediateMemberTreeDataKernel::size
size_t size() const
Definition: ImmediateTreeDataKernels.h:96
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::ContainedData
void ContainedData(DataT *data)
Definition: ImmediateTreeDataKernels.h:151
GfxTL::ImmediateRangeTreeDataKernel::EndHandle
HandleType EndHandle() const
Definition: ImmediateTreeDataKernels.h:367
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::const_iterator
DataT::const_iterator const_iterator
Definition: ImmediateTreeDataKernels.h:148
armarx::ctrlutil::a
double a(double t, double a0, double j)
Definition: CtrlUtil.h:45
GfxTL::ImmediateRangeTreeDataKernel::Dereference
DereferencedType Dereference(HandleType h) const
Definition: ImmediateTreeDataKernels.h:301
GfxTL::ImmediateIteratorTreeDataKernel::reference
std::iterator_traits< IteratorT >::reference reference
Definition: ImmediateTreeDataKernels.h:405
GfxTL::ImmediateMemberTreeDataKernel::back
const value_type & back() const
Definition: ImmediateTreeDataKernels.h:66
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::end
const_iterator end() const
Definition: ImmediateTreeDataKernels.h:217
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
GfxTL::ImmediateMemberTreeDataKernel::HandleType
DataT::size_type HandleType
Definition: ImmediateTreeDataKernels.h:24
GfxTL::ImmediateMemberTreeDataKernel::BeginHandle
HandleType BeginHandle() const
Definition: ImmediateTreeDataKernels.h:102
GfxTL::ImmediateMemberTreeDataKernel::Dereference
DereferencedType Dereference(HandleType h) const
Definition: ImmediateTreeDataKernels.h:42
GfxTL::ImmediateIteratorTreeDataKernel::SwapHandles
void SwapHandles(HandleType a, HandleType b)
Definition: ImmediateTreeDataKernels.h:497
GfxTL::ImmediateMemberTreeDataKernel::iterator
DataT::iterator iterator
Definition: ImmediateTreeDataKernels.h:26
GfxTL::ImmediateMemberTreeDataKernel::end
iterator end()
Definition: ImmediateTreeDataKernels.h:78
GfxTL::ImmediateIteratorTreeDataKernel::const_iterator
IteratorT const_iterator
Definition: ImmediateTreeDataKernels.h:409
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::size
size_t size() const
Definition: ImmediateTreeDataKernels.h:223
GfxTL::ImmediateRangeTreeDataKernel::ContainedData
DataT & ContainedData()
Definition: ImmediateTreeDataKernels.h:289
GfxTL::ImmediateRangeTreeDataKernel::const_iterator
DataT::const_iterator const_iterator
Definition: ImmediateTreeDataKernels.h:273
GfxTL::ImmediateIteratorTreeDataKernel::size
size_t size() const
Definition: ImmediateTreeDataKernels.h:478
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::value_type
DataT::value_type value_type
Definition: ImmediateTreeDataKernels.h:144
GfxTL::ImmediateRangeTreeDataKernel::HandleType
DataT::size_type HandleType
Definition: ImmediateTreeDataKernels.h:270
GfxTL
Definition: AABox.h:9
GfxTL::ImmediateIteratorTreeDataKernel::Dereference
DereferencedType Dereference(HandleType h) const
Definition: ImmediateTreeDataKernels.h:424
GfxTL::ImmediateRangeTreeDataKernel::end
iterator end()
Definition: ImmediateTreeDataKernels.h:337
GfxTL::ImmediateMemberTreeDataKernel::InsertBack
void InsertBack(HandleType h)
Definition: ImmediateTreeDataKernels.h:121
GfxTL::ImmediateMemberTreeDataKernel::EndHandle
HandleType EndHandle() const
Definition: ImmediateTreeDataKernels.h:108
GfxTL::ImmediateIteratorTreeDataKernel::back
reference back() const
Definition: ImmediateTreeDataKernels.h:448
GfxTL::ImmediateRangeTreeDataKernel::Remove
void Remove(DereferencedType s)
Definition: ImmediateTreeDataKernels.h:388
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::ContainedData
DataT & ContainedData()
Definition: ImmediateTreeDataKernels.h:157
GfxTL::ImmediateRangeTreeDataKernel::ContainedData
void ContainedData(DataT *data)
Definition: ImmediateTreeDataKernels.h:276
GfxTL::ImmediateIteratorTreeDataKernel::end
iterator end()
Definition: ImmediateTreeDataKernels.h:460
GfxTL::ImmediateRangeTreeDataKernel
Definition: ImmediateTreeDataKernels.h:266
std
Definition: Application.h:66
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::InsertBack
void InsertBack(HandleType h)
Definition: ImmediateTreeDataKernels.h:248
GfxTL::ImmediateIteratorTreeDataKernel::at
reference at(DereferencedType s) const
Definition: ImmediateTreeDataKernels.h:436
GfxTL::ImmediateRangeTreeDataKernel::iterator
DataT::iterator iterator
Definition: ImmediateTreeDataKernels.h:272
GfxTL::ImmediateRangeTreeDataKernel::value_type
DataT::value_type value_type
Definition: ImmediateTreeDataKernels.h:269
GfxTL::ImmediateIteratorTreeDataKernel::iterator
IteratorT iterator
Definition: ImmediateTreeDataKernels.h:408
GfxTL::ImmediateIteratorTreeDataKernel::at
reference at(DereferencedType s)
Definition: ImmediateTreeDataKernels.h:430
GfxTL::ImmediateRangeTreeDataKernel::at
const value_type & at(DereferencedType s) const
Definition: ImmediateTreeDataKernels.h:313
GfxTL::ImmediateIteratorTreeDataKernel::HandleType
size_t HandleType
Definition: ImmediateTreeDataKernels.h:406
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::back
value_type & back()
Definition: ImmediateTreeDataKernels.h:187
GfxTL::ImmediateMemberTreeDataKernel::ContainedData
DataT & ContainedData()
Definition: ImmediateTreeDataKernels.h:30
GfxTL::ImmediateIteratorTreeDataKernel::value_type
std::iterator_traits< IteratorT >::value_type value_type
Definition: ImmediateTreeDataKernels.h:404
GfxTL::ImmediateRangeTreeDataKernel::InsertBack
void InsertBack(HandleType h)
Definition: ImmediateTreeDataKernels.h:380
GfxTL::ImmediateMemberTreeDataKernel::at
value_type & at(DereferencedType s)
Definition: ImmediateTreeDataKernels.h:48
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::at
value_type & at(DereferencedType s)
Definition: ImmediateTreeDataKernels.h:175
GfxTL::ImmediateIteratorTreeDataKernel::begin
const_iterator begin() const
Definition: ImmediateTreeDataKernels.h:466
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
GfxTL::Swap
void Swap(HandleT a, HandleT b, ContainerT *container)
Definition: Swap.h:10
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::HandleType
DataT::size_type HandleType
Definition: ImmediateTreeDataKernels.h:145
GfxTL::ImmediateMemberTreeDataKernel
Definition: ImmediateTreeDataKernels.h:20
GfxTL::ImmediateMemberTreeDataKernel::end
const_iterator end() const
Definition: ImmediateTreeDataKernels.h:90
GfxTL::ImmediateRangeTreeDataKernel::begin
const_iterator begin() const
Definition: ImmediateTreeDataKernels.h:343
GfxTL::ImmediateMemberTreeDataKernel< DataT * >::ContainedData
const DataT & ContainedData() const
Definition: ImmediateTreeDataKernels.h:163
GfxTL::ImmediateRangeTreeDataKernel::DataRange
void DataRange(HandleType begin, HandleType end)
Definition: ImmediateTreeDataKernels.h:282
GfxTL::ImmediateRangeTreeDataKernel::back
value_type & back()
Definition: ImmediateTreeDataKernels.h:319
GfxTL::ImmediateRangeTreeDataKernel::at
value_type & at(DereferencedType s)
Definition: ImmediateTreeDataKernels.h:307