AmpGen 2.1
Loading...
Searching...
No Matches
iterator.h
Go to the documentation of this file.
1#include <array>
2
3namespace AmpGen {
4 template <class stored_type, class store_type, unsigned simd_size, bool modifiable> class scatter_iterator {
5 store_type *m_store;
6 std::array<stored_type, simd_size> m_buffer;
7 size_t m_pos{0};
8
9 public:
10 int pos() const { return m_pos; }
11 scatter_iterator(const size_t &pos, store_type *store) : m_store(store), m_pos(pos) {
12 if(m_store != nullptr && pos < m_store->aligned_size()) m_buffer = m_store->scatter(pos / simd_size);
13 }
14 stored_type *operator->() const { return &(m_buffer)[m_pos % simd_size]; }
15 stored_type operator*() const { return m_buffer[m_pos % simd_size]; }
16 stored_type &operator*() { return m_buffer[m_pos % simd_size]; }
18 m_pos++;
19 if(m_pos % simd_size == 0) {
20 if constexpr(modifiable == true) m_store->gather(m_buffer, (m_pos - 1) / simd_size);
21 m_buffer = m_store->scatter(m_pos);
22 }
23 return *this;
24 }
26 if constexpr(modifiable == true) {
27 if(m_store != nullptr && m_pos % simd_size != 0) { m_store->gather(m_buffer, m_pos / simd_size); }
28 }
29 }
30 bool operator==(const scatter_iterator &rhs) const { return m_pos == rhs.m_pos; }
31 bool operator!=(const scatter_iterator &rhs) const { return m_pos != rhs.m_pos; }
32 friend int operator-(const scatter_iterator &lhs, const scatter_iterator &rhs) { return lhs.pos() - rhs.pos(); }
33 };
34 template <unsigned simd_size, bool modifiable = false, class store_type> auto make_scatter_iterator(const unsigned &pos, store_type *store) {
36 }
37}
scatter_iterator(const size_t &pos, store_type *store)
Definition iterator.h:11
stored_type * operator->() const
Definition iterator.h:14
stored_type operator*() const
Definition iterator.h:15
stored_type & operator*()
Definition iterator.h:16
friend int operator-(const scatter_iterator &lhs, const scatter_iterator &rhs)
Definition iterator.h:32
scatter_iterator & operator++()
Definition iterator.h:17
bool operator==(const scatter_iterator &rhs) const
Definition iterator.h:30
bool operator!=(const scatter_iterator &rhs) const
Definition iterator.h:31
auto make_scatter_iterator(const unsigned &pos, store_type *store)
Definition iterator.h:34