DSC
 All Classes Namespaces Files Functions Variables Typedefs Friends Macros
kernel_iterator.h
1 
2 #pragma once
3 
4 namespace is_mesh
5 {
21  template <class kernel_t_>
23  {
24  private:
25  using element_type = typename kernel_t_::kernel_element;
26  public:
27  using kernel_type = kernel_t_;
29  using kernel_element = typename kernel_type::kernel_element;
30  using value_type = typename element_type::value_type;
31  using key_type = typename kernel_t_::kernel_key_type;
32 
33  private:
34  unsigned int m_key;
35  kernel_type* m_kernel;
36 
37  public:
42  kernel_iterator(kernel_type const * const kernel, unsigned int const & key) : m_key(key)
43  {
44  m_kernel = const_cast<kernel_type*>(kernel);
45  }
46 
47 
48  public:
52  key_type key() const {
53  return key_type{m_key};
54  }
58  kernel_type* kernel() const { return m_kernel; }
59 
63  friend bool operator==(const iterator& i, const iterator& j)
64  {
65  return (i.m_key == j.m_key) && (i.m_kernel == j.m_kernel);
66  }
70  friend bool operator!=(const iterator& i, const iterator& j)
71  {
72  return (i.m_key != j.m_key) || (i.m_kernel != j.m_kernel);
73  }
74 
80  value_type* operator->()
81  {
82  assert(m_kernel->lookup(key_type{m_key}).state == element_type::VALID);
83  return &m_kernel->m_data[m_key].value;
84  }
85 
91  value_type& operator*()
92  {
93  assert(m_kernel->lookup(key_type{m_key}).state == element_type::VALID);
94  return m_kernel->m_data[m_key].value;
95  }
96 
103  {
104  do {
105  m_key++;
106  } while (m_key < m_kernel->m_data.size() && m_kernel->m_data[m_key].state != element_type::VALID);
107  return *this;
108  }
109 
116  {
117  iterator tmp = *this;
118  ++*this;
119  return tmp;
120  }
121  };
122 }
kernel_type * kernel() const
Definition: kernel_iterator.h:58
friend bool operator==(const iterator &i, const iterator &j)
Definition: kernel_iterator.h:63
Definition: kernel_iterator.h:22
friend bool operator!=(const iterator &i, const iterator &j)
Definition: kernel_iterator.h:70
iterator operator++(int)
Definition: kernel_iterator.h:115
kernel_iterator(kernel_type const *const kernel, unsigned int const &key)
Definition: kernel_iterator.h:42
key_type key() const
Definition: kernel_iterator.h:52
value_type & operator*()
Definition: kernel_iterator.h:91
Definition: kernel.h:80
iterator & operator++()
Definition: kernel_iterator.h:102
value_type * operator->()
Definition: kernel_iterator.h:80