idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
IteratorForward.h
1//
2// Created by henri on 09/09/22.
3//
4
5#ifndef OPTIMIZE_ITERATORFORWARD_H
6#define OPTIMIZE_ITERATORFORWARD_H
7
8#include <memory>
9
10namespace idol {
11 template<class T, class IteratorT, class ConstIteratorT>
12 class IteratorForward;
13
14 template<class T, class ConstIteratorT>
15 class ConstIteratorForward;
16}
17
18template<class T, class IteratorT = typename T::iterator, class ConstIteratorT = typename T::const_iterator>
20 T& m_container;
21public:
22 IteratorForward(T& t_container) : m_container(t_container) {} // NOLINT(google-explicit-constructor)
23
24 IteratorForward(const IteratorForward& t_src) = default;
25 IteratorForward(IteratorForward&&) noexcept = default;
26
27 IteratorForward& operator=(const IteratorForward&) = delete;
28 IteratorForward& operator=(IteratorForward&&) noexcept = delete;
29
30 IteratorT begin() { return m_container.begin(); }
31 IteratorT end() { return m_container.end(); }
32 [[nodiscard]] ConstIteratorT begin() const { return m_container.begin(); }
33 [[nodiscard]] ConstIteratorT end() const { return m_container.end(); }
34 [[nodiscard]] ConstIteratorT cbegin() const { return m_container.begin(); }
35 [[nodiscard]] ConstIteratorT cend() const { return m_container.end(); }
36
37 [[nodiscard]] unsigned int size() const { return m_container.size(); }
38};
39
40template<class T, class ConstIteratorT = typename T::const_iterator>
42 const T& m_container;
43public:
44 ConstIteratorForward(const T& t_container) : m_container(t_container) {} // NOLINT(google-explicit-constructor)
45
47 ConstIteratorForward(ConstIteratorForward&&) noexcept = default;
48
49 ConstIteratorForward& operator=(const ConstIteratorForward&) = delete;
50 ConstIteratorForward& operator=(ConstIteratorForward&&) noexcept = delete;
51
52 [[nodiscard]] ConstIteratorT begin() const { return m_container.begin(); }
53 [[nodiscard]] ConstIteratorT end() const { return m_container.end(); }
54 [[nodiscard]] ConstIteratorT cbegin() const { return m_container.begin(); }
55 [[nodiscard]] ConstIteratorT cend() const { return m_container.end(); }
56
57 [[nodiscard]] unsigned int size() const { return m_container.size(); }
58};
59
60#endif //OPTIMIZE_ITERATORFORWARD_H