Aikido
VanDerCorput.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_COMMON_VANDERCORPUT_HPP_
2 #define AIKIDO_COMMON_VANDERCORPUT_HPP_
3 
4 #include <limits>
5 #include <utility>
6 
7 #include <boost/iterator/iterator_facade.hpp>
8 
9 namespace aikido {
10 namespace common {
11 
17 {
18 public:
19  class const_iterator;
20 
31  double span = 1.0,
32  bool includeStartpoint = false,
33  bool includeEndpoint = false,
34  double minResolution = 0.0);
35 
39  const_iterator begin() const;
40 
45  const_iterator end() const;
46 
52  std::pair<double, double> operator[](int n) const;
53 
57  std::size_t getLength() const;
58 
59 private:
60  constexpr static int BASE{2};
61  constexpr static int MAX{std::numeric_limits<int>::max()};
62 
63  std::pair<double, double> computeVanDerCorput(int n) const;
64 
65  const double mSpan;
66  const bool mIncludeStartpoint;
67  const bool mIncludeEndpoint;
69 };
70 
72  : public boost::iterator_facade<
73  VanDerCorput::const_iterator,
74  const double,
75  boost::forward_traversal_tag,
76  const double>
77 {
78 public:
80  double dereference() const;
81 
83  void increment();
84 
86  bool equal(const VanDerCorput::const_iterator& other) const;
87 
88 private:
89  friend class VanDerCorput;
90 
93  const_iterator(const VanDerCorput* seq);
94 
96  int mN;
97  bool mFinalIter;
98  std::pair<double, double> mCurr;
99 };
100 
101 } // namespace common
102 } // namespace aikido
103 
104 #endif // AIKIDO_COMMON_VANDERCORPUT_HPP_
aikido::common::VanDerCorput::MAX
constexpr static int MAX
Definition: VanDerCorput.hpp:61
aikido::common::VanDerCorput::const_iterator::increment
void increment()
Increment implementation for boost::iterator_facade.
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::common::VanDerCorput::end
const_iterator end() const
Returns an iterator to the element following the last element of the sequence.
aikido::common::VanDerCorput::const_iterator::dereference
double dereference() const
Dereference implementation for boost::iterator_facade.
aikido::common::VanDerCorput::computeVanDerCorput
std::pair< double, double > computeVanDerCorput(int n) const
aikido::common::VanDerCorput::begin
const_iterator begin() const
Returns an iterator to the first element of the sequence.
aikido::common::VanDerCorput::const_iterator::const_iterator
const_iterator(const VanDerCorput *seq)
Private constructor that should always be constructed from VanDerCorput::begin()
aikido::common::VanDerCorput::const_iterator
Definition: VanDerCorput.hpp:71
aikido::common::VanDerCorput::const_iterator::mCurr
std::pair< double, double > mCurr
Definition: VanDerCorput.hpp:98
aikido::common::VanDerCorput
Generator for the Van der Corput sequence, a low-discripancy sequence defined over a real interval.
Definition: VanDerCorput.hpp:16
aikido::common::VanDerCorput::operator[]
std::pair< double, double > operator[](int n) const
Returns the n-th element of the sequence (first element in the pair) and the current resolution (seco...
aikido::common::VanDerCorput::mSpan
const double mSpan
Definition: VanDerCorput.hpp:65
aikido::common::VanDerCorput::const_iterator::mN
int mN
Definition: VanDerCorput.hpp:96
aikido::common::VanDerCorput::const_iterator::mFinalIter
bool mFinalIter
Definition: VanDerCorput.hpp:97
aikido::common::VanDerCorput::const_iterator::mSeq
const VanDerCorput * mSeq
Definition: VanDerCorput.hpp:95
aikido::common::VanDerCorput::mIncludeStartpoint
const bool mIncludeStartpoint
Definition: VanDerCorput.hpp:66
aikido::common::VanDerCorput::BASE
constexpr static int BASE
Definition: VanDerCorput.hpp:60
aikido::common::VanDerCorput::getLength
std::size_t getLength() const
Returns the total length of sequence.
aikido::common::VanDerCorput::mMinResolution
double mMinResolution
Definition: VanDerCorput.hpp:68
aikido::common::VanDerCorput::mIncludeEndpoint
const bool mIncludeEndpoint
Definition: VanDerCorput.hpp:67
aikido::common::VanDerCorput::VanDerCorput
VanDerCorput(double span=1.0, bool includeStartpoint=false, bool includeEndpoint=false, double minResolution=0.0)
Construts the Van der Corput sequence over an interval of length span that terminates when the maximu...
aikido::common::VanDerCorput::const_iterator::equal
bool equal(const VanDerCorput::const_iterator &other) const
equal implementation for boost::iterator_facade