Remove some unused includes in C++ files
[babeltrace.git] / src / cpp-common / bt2 / common-iter.hpp
CommitLineData
9ded8453
FD
1/*
2 * Copyright (c) 2022 Francis Deslauriers <francis.deslauriers@efficios.com>
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7#ifndef BABELTRACE_CPP_COMMON_BT2_COMMON_ITER_HPP
8#define BABELTRACE_CPP_COMMON_BT2_COMMON_ITER_HPP
9
10#include <iterator>
9ded8453
FD
11
12#include "cpp-common/optional.hpp"
13
14namespace bt2 {
15
16template <typename ContainerT, typename ElemT>
17class CommonIterator
18{
19 friend ContainerT;
20
21public:
22 using difference_type = std::ptrdiff_t;
23 using value_type = ElemT;
24 using pointer = value_type *;
25 using reference = value_type&;
26 using iterator_category = std::input_iterator_tag;
27
28private:
29 explicit CommonIterator(const ContainerT container, const uint64_t idx) :
30 _mContainer {container}, _mIdx {idx}
31 {
32 this->_updateCurrentValue();
33 }
34
35public:
36 CommonIterator(const CommonIterator&) = default;
37 CommonIterator(CommonIterator&&) = default;
38 CommonIterator& operator=(const CommonIterator&) = default;
39 CommonIterator& operator=(CommonIterator&&) = default;
40
41 CommonIterator& operator++() noexcept
42 {
43 ++_mIdx;
44 this->_updateCurrentValue();
45 return *this;
46 }
47
48 CommonIterator operator++(int) noexcept
49 {
50 const auto tmp = *this;
51
52 ++(*this);
53 return tmp;
54 }
55
56 bool operator==(const CommonIterator& other) const noexcept
57 {
58 return _mIdx == other._mIdx;
59 }
60
61 bool operator!=(const CommonIterator& other) const noexcept
62 {
63 return !(*this == other);
64 }
65
66 reference operator*() noexcept
67 {
68 return *_mCurrVal;
69 }
70
71 pointer operator->() noexcept
72 {
73 return &(*_mCurrVal);
74 }
75
76private:
77 void _updateCurrentValue() noexcept
78 {
79 if (_mIdx < _mContainer.size()) {
80 _mCurrVal = _mContainer[_mIdx];
81 } else {
82 _mCurrVal = nonstd::nullopt;
83 }
84 }
85
86 nonstd::optional<value_type> _mCurrVal;
87 ContainerT _mContainer;
88 uint64_t _mIdx;
89};
90} /* namespace bt2 */
91
92#endif /* BABELTRACE_CPP_COMMON_BT2_COMMON_ITER_HPP */
This page took 0.027956 seconds and 4 git commands to generate.