1.10
range.h
1/*
2 * Copyright (C) 2023 Microchip Technology Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6#ifndef EGT_DETAIL_RANGE_H
7#define EGT_DETAIL_RANGE_H
8
14namespace egt
15{
16inline namespace v1
17{
18namespace detail
19{
20
24template<typename T>
25class Range
26{
27public:
28 Range() {}
29
30 void begin(typename T::iterator begin) noexcept
31 {
32 m_begin = begin;
33 }
34
35 typename T::iterator begin() noexcept
36 {
37 return m_begin;
38 }
39
40 typename T::const_iterator begin() const noexcept
41 {
42 return m_begin;
43 }
44
45 typename T::const_iterator cbegin() const noexcept
46 {
47 return m_begin;
48 }
49
50 void end(typename T::iterator end) noexcept
51 {
52 m_end = end;
53 }
54
55 typename T::iterator end() noexcept
56 {
57 return m_end;
58 }
59
60 typename T::const_iterator end() const noexcept
61 {
62 return m_end;
63 }
64
65 typename T::const_iterator cend() const noexcept
66 {
67 return m_end;
68 }
69
70 typename T::reverse_iterator rbegin() noexcept
71 {
72 return std::reverse_iterator<typename T::iterator>(m_end);
73 }
74
75 typename T::reverse_iterator rend() noexcept
76 {
77 return std::reverse_iterator<typename T::iterator>(m_begin);
78 }
79
80 typename T::const_reverse_iterator rbegin() const noexcept
81 {
82 return std::reverse_iterator<typename T::const_iterator>(m_end);
83 }
84
85 typename T::const_reverse_iterator rend() const noexcept
86 {
87 return std::reverse_iterator<typename T::const_iterator>(m_begin);
88 }
89
90 typename T::const_reverse_iterator crbegin() const noexcept
91 {
92 return std::reverse_iterator<typename T::const_iterator>(m_end);
93 }
94
95 typename T::const_reverse_iterator crend() const noexcept
96 {
97 return std::reverse_iterator<typename T::const_iterator>(m_begin);
98 }
99
100 size_t size() const noexcept
101 {
102 return std::distance(m_begin, m_end);
103 }
104
105 bool empty() const noexcept
106 {
107 return (m_begin == m_end);
108 }
109private:
110 typename T::iterator m_begin;
111 typename T::iterator m_end;
112};
113
114}
115}
116}
117
118#endif
Utility class to allow range loops from a subset of a container.
Definition range.h:26
T::const_reverse_iterator crbegin() const noexcept
Definition range.h:90
T::iterator end() noexcept
Definition range.h:55
T::const_iterator cbegin() const noexcept
Definition range.h:45
size_t size() const noexcept
Definition range.h:100
bool empty() const noexcept
Definition range.h:105
T::const_iterator begin() const noexcept
Definition range.h:40
T::reverse_iterator rend() noexcept
Definition range.h:75
T::const_iterator end() const noexcept
Definition range.h:60
T::const_reverse_iterator crend() const noexcept
Definition range.h:95
void begin(typename T::iterator begin) noexcept
Definition range.h:30
T::reverse_iterator rbegin() noexcept
Definition range.h:70
T::const_iterator cend() const noexcept
Definition range.h:65
void end(typename T::iterator end) noexcept
Definition range.h:50
T::const_reverse_iterator rbegin() const noexcept
Definition range.h:80
T::iterator begin() noexcept
Definition range.h:35
Range()
Definition range.h:28
T::const_reverse_iterator rend() const noexcept
Definition range.h:85
EGT framework namespace.
Definition animation.h:24