Program listing for file kernel/src/utils/SiconosAlgebra/SiconosVectorIterator.hpp#
Return to documentation for this file
1#ifndef __SiconosVectorIterator__
2#define __SiconosVectorIterator__
3
4#include <iterator>
5
6template <typename V, typename T, typename TRef>
7struct SiconosVectorIteratorTypeTpl {
8 using iterator_category = std::forward_iterator_tag;
9 using value_type = T;
10 using difference_type = T;
11 using pointer = T*;
12 using reference = T&;
13
14 V* v{nullptr};
15 size_t p{0};
16 SiconosVectorIteratorTypeTpl() = default;
17 SiconosVectorIteratorTypeTpl(V& _v, size_t _p) : v(&_v), p(_p){};
18
19 bool operator!=(const SiconosVectorIteratorTypeTpl& it) { return v != it.v || p != it.p; }
20 bool operator==(const SiconosVectorIteratorTypeTpl& it) { return v == it.v && p == it.p; }
21
22 SiconosVectorIteratorTypeTpl& operator++()
23 {
24 if (p < v->size()) p++;
25 return *this;
26 }
27 SiconosVectorIteratorTypeTpl operator++(int)
28 {
29 SiconosVectorIteratorTypeTpl tmp(*this);
30 if (p < v->size()) p++;
31 return tmp;
32 }
33
34 TRef operator*() { return (*v)(p); }
35};
36
37
38
39
40typedef SiconosVectorIteratorTypeTpl<SiconosVector, double, double&> SiconosVectorIteratorType;
41
42struct SiconosVectorIterator : public SiconosVectorIteratorType {
43 SiconosVectorIterator() : SiconosVectorIteratorType() {}
44 SiconosVectorIterator(SiconosVectorIteratorType& it) : SiconosVectorIteratorType(*it.v, it.p)
45 {
46 }
47 SiconosVectorIterator(SiconosVector& _v, size_t _p) : SiconosVectorIteratorType(_v, _p) {}
48};
49
50
51typedef SiconosVectorIteratorTypeTpl<const SiconosVector, const double, double>
52 SiconosVectorConstIteratorType;
53
54struct SiconosVectorConstIterator : public SiconosVectorConstIteratorType {
55 SiconosVectorConstIterator() : SiconosVectorConstIteratorType() {}
56 SiconosVectorConstIterator(SiconosVectorConstIteratorType& it)
57 : SiconosVectorConstIteratorType(*it.v, it.p)
58 {
59 }
60 SiconosVectorConstIterator(const SiconosVector& _v, size_t _p)
61 : SiconosVectorConstIteratorType(_v, _p)
62 {
63 }
64};
65
66#endif