Tatooine
vertex_iterator.h
Go to the documentation of this file.
1#ifndef TATOOINE_DETAIL_LINE_VERTEX_ITERATOR_H
2#define TATOOINE_DETAIL_LINE_VERTEX_ITERATOR_H
3//==============================================================================
4#include <boost/iterator/iterator_facade.hpp>
5//==============================================================================
7//==============================================================================
8template <typename Real, size_t NumDimensions, typename Handle>
10 : boost::iterator_facade<vertex_iterator<Real, NumDimensions, Handle>,
11 Handle, boost::bidirectional_traversal_tag,
12 Handle> {
13 //============================================================================
14 // typedefs
15 //============================================================================
17
18 //============================================================================
19 // ctors
20 //============================================================================
22 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
23 vertex_iterator(const vertex_iterator& other) = default;
24
25 //============================================================================
26 // members
27 //============================================================================
28 private:
29 Handle m_handle;
30
31 //============================================================================
32 // iterator_facade
33 //============================================================================
34 private:
36 //----------------------------------------------------------------------------
37 auto increment() -> void { ++m_handle; }
38 auto decrement() -> void { --m_handle; }
39 //----------------------------------------------------------------------------
40 auto equal(const vertex_iterator& other) const {
41 return m_handle == other.m_handle;
42 }
43 //----------------------------------------------------------------------------
44 auto dereference() const { return m_handle; }
45
46 //============================================================================
47 // methods
48 //============================================================================
49 public:
50 auto next(const size_t inc = 1) const -> this_type {
51 this_type n = *this;
52 n.m_handle.i += inc;
53 return n;
54 }
55 auto prev(const size_t dec = 1) const -> this_type {
56 this_type p = *this;
57 p.m_handle.i -= dec;
58 return p;
59 }
60 auto advance(const size_t inc = 1) const -> auto& {
61 m_handle.i += inc;
62 return *this;
63 }
64};
65//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66template <typename Real, size_t NumDimensions, typename Handle>
68 size_t inc = 1) {
69 return it.next(inc);
70}
71// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
72template <typename Real, size_t NumDimensions, typename Handle>
74 size_t dec = 1) {
75 return it.prev(dec);
76}
77// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
78template <typename Real, size_t NumDimensions, typename Handle>
80 -> auto& {
81 return it.advance(inc);
82}
83//==============================================================================
84} // namespace tatooine::detail::line
85//==============================================================================
86#endif
Definition: merge.h:8
auto prev(const vertex_iterator< Real, NumDimensions, Handle > &it, size_t dec=1)
Definition: vertex_iterator.h:73
auto advance(vertex_iterator< Real, NumDimensions, Handle > &it, size_t inc=1) -> auto &
Definition: vertex_iterator.h:79
auto next(const vertex_iterator< Real, NumDimensions, Handle > &it, size_t inc=1)
Definition: vertex_iterator.h:67
Definition: vertex_iterator.h:12
vertex_iterator(Handle handle)
Definition: vertex_iterator.h:21
auto decrement() -> void
Definition: vertex_iterator.h:38
vertex_iterator(const vertex_iterator &other)=default
auto prev(const size_t dec=1) const -> this_type
Definition: vertex_iterator.h:55
auto increment() -> void
Definition: vertex_iterator.h:37
auto equal(const vertex_iterator &other) const
Definition: vertex_iterator.h:40
auto dereference() const
Definition: vertex_iterator.h:44
Handle m_handle
Definition: vertex_iterator.h:29
auto advance(const size_t inc=1) const -> auto &
Definition: vertex_iterator.h:60
auto next(const size_t inc=1) const -> this_type
Definition: vertex_iterator.h:50
friend class boost::iterator_core_access
Definition: vertex_iterator.h:35
Definition: handle.h:14