@@ -0,0 +1,54 | |||
|
1 | #ifndef SCIQLOP_SQPITERATOR_H | |
|
2 | #define SCIQLOP_SQPITERATOR_H | |
|
3 | ||
|
4 | #include "CoreGlobal.h" | |
|
5 | ||
|
6 | /** | |
|
7 | * @brief The SqpIterator class represents an iterator used in SciQlop. It defines all operators | |
|
8 | * needed for a standard forward iterator | |
|
9 | * @tparam T the type of object handled in iterator | |
|
10 | * @sa http://www.cplusplus.com/reference/iterator/ | |
|
11 | */ | |
|
12 | template <typename T> | |
|
13 | class SCIQLOP_CORE_EXPORT SqpIterator { | |
|
14 | public: | |
|
15 | using iterator_category = std::forward_iterator_tag; | |
|
16 | using value_type = const T; | |
|
17 | using difference_type = std::ptrdiff_t; | |
|
18 | using pointer = value_type *; | |
|
19 | using reference = value_type &; | |
|
20 | ||
|
21 | explicit SqpIterator(T value) : m_CurrentValue{std::move(value)} {} | |
|
22 | ||
|
23 | virtual ~SqpIterator() noexcept = default; | |
|
24 | SqpIterator(const SqpIterator &) = default; | |
|
25 | SqpIterator(SqpIterator &&) = default; | |
|
26 | SqpIterator &operator=(const SqpIterator &) = default; | |
|
27 | SqpIterator &operator=(SqpIterator &&) = default; | |
|
28 | ||
|
29 | SqpIterator &operator++() | |
|
30 | { | |
|
31 | m_CurrentValue.next(); | |
|
32 | return *this; | |
|
33 | } | |
|
34 | ||
|
35 | SqpIterator &operator--() | |
|
36 | { | |
|
37 | m_CurrentValue.prev(); | |
|
38 | return *this; | |
|
39 | } | |
|
40 | ||
|
41 | pointer operator->() const { return &m_CurrentValue; } | |
|
42 | reference operator*() const { return m_CurrentValue; } | |
|
43 | ||
|
44 | bool operator==(const SqpIterator &other) const | |
|
45 | { | |
|
46 | return m_CurrentValue.equals(other.m_CurrentValue); | |
|
47 | } | |
|
48 | bool operator!=(const SqpIterator &other) const { return !(*this == other); } | |
|
49 | ||
|
50 | private: | |
|
51 | T m_CurrentValue; | |
|
52 | }; | |
|
53 | ||
|
54 | #endif // SCIQLOP_SQPITERATOR_H |
@@ -2,6 +2,7 | |||
|
2 | 2 | #define SCIQLOP_DATASERIESITERATOR_H |
|
3 | 3 | |
|
4 | 4 | #include "CoreGlobal.h" |
|
5 | #include "Data/SqpIterator.h" | |
|
5 | 6 | |
|
6 | 7 | #include <memory> |
|
7 | 8 | |
@@ -54,35 +55,6 private: | |||
|
54 | 55 | std::unique_ptr<Impl> m_Impl; |
|
55 | 56 | }; |
|
56 | 57 | |
|
57 | /** | |
|
58 | * @brief The DataSeriesIterator class represents an iterator used for data series. It defines all | |
|
59 | * operators needed for a standard forward iterator | |
|
60 | * @sa http://www.cplusplus.com/reference/iterator/ | |
|
61 | */ | |
|
62 | class SCIQLOP_CORE_EXPORT DataSeriesIterator { | |
|
63 | public: | |
|
64 | using iterator_category = std::forward_iterator_tag; | |
|
65 | using value_type = const DataSeriesIteratorValue; | |
|
66 | using difference_type = std::ptrdiff_t; | |
|
67 | using pointer = value_type *; | |
|
68 | using reference = value_type &; | |
|
69 | ||
|
70 | explicit DataSeriesIterator(DataSeriesIteratorValue value); | |
|
71 | virtual ~DataSeriesIterator() noexcept = default; | |
|
72 | DataSeriesIterator(const DataSeriesIterator &) = default; | |
|
73 | DataSeriesIterator(DataSeriesIterator &&) = default; | |
|
74 | DataSeriesIterator &operator=(const DataSeriesIterator &) = default; | |
|
75 | DataSeriesIterator &operator=(DataSeriesIterator &&) = default; | |
|
76 | ||
|
77 | DataSeriesIterator &operator++(); | |
|
78 | DataSeriesIterator &operator--(); | |
|
79 | pointer operator->() const { return &m_CurrentValue; } | |
|
80 | reference operator*() const { return m_CurrentValue; } | |
|
81 | bool operator==(const DataSeriesIterator &other) const; | |
|
82 | bool operator!=(const DataSeriesIterator &other) const; | |
|
83 | ||
|
84 | private: | |
|
85 | DataSeriesIteratorValue m_CurrentValue; | |
|
86 | }; | |
|
58 | using DataSeriesIterator = SqpIterator<DataSeriesIteratorValue>; | |
|
87 | 59 | |
|
88 | 60 | #endif // SCIQLOP_DATASERIESITERATOR_H |
@@ -56,30 +56,3 double DataSeriesIteratorValue::maxValue() const | |||
|
56 | 56 | { |
|
57 | 57 | return m_Impl->maxValue(); |
|
58 | 58 | } |
|
59 | ||
|
60 | DataSeriesIterator::DataSeriesIterator(DataSeriesIteratorValue value) | |
|
61 | : m_CurrentValue{std::move(value)} | |
|
62 | { | |
|
63 | } | |
|
64 | ||
|
65 | DataSeriesIterator &DataSeriesIterator::operator++() | |
|
66 | { | |
|
67 | m_CurrentValue.next(); | |
|
68 | return *this; | |
|
69 | } | |
|
70 | ||
|
71 | DataSeriesIterator &DataSeriesIterator::operator--() | |
|
72 | { | |
|
73 | m_CurrentValue.prev(); | |
|
74 | return *this; | |
|
75 | } | |
|
76 | ||
|
77 | bool DataSeriesIterator::operator==(const DataSeriesIterator &other) const | |
|
78 | { | |
|
79 | return m_CurrentValue.equals(other.m_CurrentValue); | |
|
80 | } | |
|
81 | ||
|
82 | bool DataSeriesIterator::operator!=(const DataSeriesIterator &other) const | |
|
83 | { | |
|
84 | return !(*this == other); | |
|
85 | } |
General Comments 0
You need to be logged in to leave comments.
Login now