xref: /aosp_15_r20/external/libchrome/base/value_iterators.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "base/value_iterators.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include "base/values.h"
8*635a8641SAndroid Build Coastguard Worker 
9*635a8641SAndroid Build Coastguard Worker namespace base {
10*635a8641SAndroid Build Coastguard Worker 
11*635a8641SAndroid Build Coastguard Worker namespace detail {
12*635a8641SAndroid Build Coastguard Worker 
13*635a8641SAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
14*635a8641SAndroid Build Coastguard Worker // dict_iterator.
15*635a8641SAndroid Build Coastguard Worker 
pointer(const reference & ref)16*635a8641SAndroid Build Coastguard Worker dict_iterator::pointer::pointer(const reference& ref) : ref_(ref) {}
17*635a8641SAndroid Build Coastguard Worker 
18*635a8641SAndroid Build Coastguard Worker dict_iterator::pointer::pointer(const pointer& ptr) = default;
19*635a8641SAndroid Build Coastguard Worker 
dict_iterator(DictStorage::iterator dict_iter)20*635a8641SAndroid Build Coastguard Worker dict_iterator::dict_iterator(DictStorage::iterator dict_iter)
21*635a8641SAndroid Build Coastguard Worker     : dict_iter_(dict_iter) {}
22*635a8641SAndroid Build Coastguard Worker 
23*635a8641SAndroid Build Coastguard Worker dict_iterator::dict_iterator(const dict_iterator& dict_iter) = default;
24*635a8641SAndroid Build Coastguard Worker 
25*635a8641SAndroid Build Coastguard Worker dict_iterator& dict_iterator::operator=(const dict_iterator& dict_iter) =
26*635a8641SAndroid Build Coastguard Worker     default;
27*635a8641SAndroid Build Coastguard Worker 
28*635a8641SAndroid Build Coastguard Worker dict_iterator::~dict_iterator() = default;
29*635a8641SAndroid Build Coastguard Worker 
operator *()30*635a8641SAndroid Build Coastguard Worker dict_iterator::reference dict_iterator::operator*() {
31*635a8641SAndroid Build Coastguard Worker   return {dict_iter_->first, *dict_iter_->second};
32*635a8641SAndroid Build Coastguard Worker }
33*635a8641SAndroid Build Coastguard Worker 
operator ->()34*635a8641SAndroid Build Coastguard Worker dict_iterator::pointer dict_iterator::operator->() {
35*635a8641SAndroid Build Coastguard Worker   return pointer(operator*());
36*635a8641SAndroid Build Coastguard Worker }
37*635a8641SAndroid Build Coastguard Worker 
operator ++()38*635a8641SAndroid Build Coastguard Worker dict_iterator& dict_iterator::operator++() {
39*635a8641SAndroid Build Coastguard Worker   ++dict_iter_;
40*635a8641SAndroid Build Coastguard Worker   return *this;
41*635a8641SAndroid Build Coastguard Worker }
42*635a8641SAndroid Build Coastguard Worker 
operator ++(int)43*635a8641SAndroid Build Coastguard Worker dict_iterator dict_iterator::operator++(int) {
44*635a8641SAndroid Build Coastguard Worker   dict_iterator tmp(*this);
45*635a8641SAndroid Build Coastguard Worker   ++dict_iter_;
46*635a8641SAndroid Build Coastguard Worker   return tmp;
47*635a8641SAndroid Build Coastguard Worker }
48*635a8641SAndroid Build Coastguard Worker 
operator --()49*635a8641SAndroid Build Coastguard Worker dict_iterator& dict_iterator::operator--() {
50*635a8641SAndroid Build Coastguard Worker   --dict_iter_;
51*635a8641SAndroid Build Coastguard Worker   return *this;
52*635a8641SAndroid Build Coastguard Worker }
53*635a8641SAndroid Build Coastguard Worker 
operator --(int)54*635a8641SAndroid Build Coastguard Worker dict_iterator dict_iterator::operator--(int) {
55*635a8641SAndroid Build Coastguard Worker   dict_iterator tmp(*this);
56*635a8641SAndroid Build Coastguard Worker   --dict_iter_;
57*635a8641SAndroid Build Coastguard Worker   return tmp;
58*635a8641SAndroid Build Coastguard Worker }
59*635a8641SAndroid Build Coastguard Worker 
operator ==(const dict_iterator & lhs,const dict_iterator & rhs)60*635a8641SAndroid Build Coastguard Worker bool operator==(const dict_iterator& lhs, const dict_iterator& rhs) {
61*635a8641SAndroid Build Coastguard Worker   return lhs.dict_iter_ == rhs.dict_iter_;
62*635a8641SAndroid Build Coastguard Worker }
63*635a8641SAndroid Build Coastguard Worker 
operator !=(const dict_iterator & lhs,const dict_iterator & rhs)64*635a8641SAndroid Build Coastguard Worker bool operator!=(const dict_iterator& lhs, const dict_iterator& rhs) {
65*635a8641SAndroid Build Coastguard Worker   return !(lhs == rhs);
66*635a8641SAndroid Build Coastguard Worker }
67*635a8641SAndroid Build Coastguard Worker 
68*635a8641SAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
69*635a8641SAndroid Build Coastguard Worker // const_dict_iterator.
70*635a8641SAndroid Build Coastguard Worker 
pointer(const reference & ref)71*635a8641SAndroid Build Coastguard Worker const_dict_iterator::pointer::pointer(const reference& ref) : ref_(ref) {}
72*635a8641SAndroid Build Coastguard Worker 
73*635a8641SAndroid Build Coastguard Worker const_dict_iterator::pointer::pointer(const pointer& ptr) = default;
74*635a8641SAndroid Build Coastguard Worker 
const_dict_iterator(DictStorage::const_iterator dict_iter)75*635a8641SAndroid Build Coastguard Worker const_dict_iterator::const_dict_iterator(DictStorage::const_iterator dict_iter)
76*635a8641SAndroid Build Coastguard Worker     : dict_iter_(dict_iter) {}
77*635a8641SAndroid Build Coastguard Worker 
78*635a8641SAndroid Build Coastguard Worker const_dict_iterator::const_dict_iterator(const const_dict_iterator& dict_iter) =
79*635a8641SAndroid Build Coastguard Worker     default;
80*635a8641SAndroid Build Coastguard Worker 
81*635a8641SAndroid Build Coastguard Worker const_dict_iterator& const_dict_iterator::operator=(
82*635a8641SAndroid Build Coastguard Worker     const const_dict_iterator& dict_iter) = default;
83*635a8641SAndroid Build Coastguard Worker 
84*635a8641SAndroid Build Coastguard Worker const_dict_iterator::~const_dict_iterator() = default;
85*635a8641SAndroid Build Coastguard Worker 
operator *() const86*635a8641SAndroid Build Coastguard Worker const_dict_iterator::reference const_dict_iterator::operator*() const {
87*635a8641SAndroid Build Coastguard Worker   return {dict_iter_->first, *dict_iter_->second};
88*635a8641SAndroid Build Coastguard Worker }
89*635a8641SAndroid Build Coastguard Worker 
operator ->() const90*635a8641SAndroid Build Coastguard Worker const_dict_iterator::pointer const_dict_iterator::operator->() const {
91*635a8641SAndroid Build Coastguard Worker   return pointer(operator*());
92*635a8641SAndroid Build Coastguard Worker }
93*635a8641SAndroid Build Coastguard Worker 
operator ++()94*635a8641SAndroid Build Coastguard Worker const_dict_iterator& const_dict_iterator::operator++() {
95*635a8641SAndroid Build Coastguard Worker   ++dict_iter_;
96*635a8641SAndroid Build Coastguard Worker   return *this;
97*635a8641SAndroid Build Coastguard Worker }
98*635a8641SAndroid Build Coastguard Worker 
operator ++(int)99*635a8641SAndroid Build Coastguard Worker const_dict_iterator const_dict_iterator::operator++(int) {
100*635a8641SAndroid Build Coastguard Worker   const_dict_iterator tmp(*this);
101*635a8641SAndroid Build Coastguard Worker   ++dict_iter_;
102*635a8641SAndroid Build Coastguard Worker   return tmp;
103*635a8641SAndroid Build Coastguard Worker }
104*635a8641SAndroid Build Coastguard Worker 
operator --()105*635a8641SAndroid Build Coastguard Worker const_dict_iterator& const_dict_iterator::operator--() {
106*635a8641SAndroid Build Coastguard Worker   --dict_iter_;
107*635a8641SAndroid Build Coastguard Worker   return *this;
108*635a8641SAndroid Build Coastguard Worker }
109*635a8641SAndroid Build Coastguard Worker 
operator --(int)110*635a8641SAndroid Build Coastguard Worker const_dict_iterator const_dict_iterator::operator--(int) {
111*635a8641SAndroid Build Coastguard Worker   const_dict_iterator tmp(*this);
112*635a8641SAndroid Build Coastguard Worker   --dict_iter_;
113*635a8641SAndroid Build Coastguard Worker   return tmp;
114*635a8641SAndroid Build Coastguard Worker }
115*635a8641SAndroid Build Coastguard Worker 
operator ==(const const_dict_iterator & lhs,const const_dict_iterator & rhs)116*635a8641SAndroid Build Coastguard Worker bool operator==(const const_dict_iterator& lhs,
117*635a8641SAndroid Build Coastguard Worker                 const const_dict_iterator& rhs) {
118*635a8641SAndroid Build Coastguard Worker   return lhs.dict_iter_ == rhs.dict_iter_;
119*635a8641SAndroid Build Coastguard Worker }
120*635a8641SAndroid Build Coastguard Worker 
operator !=(const const_dict_iterator & lhs,const const_dict_iterator & rhs)121*635a8641SAndroid Build Coastguard Worker bool operator!=(const const_dict_iterator& lhs,
122*635a8641SAndroid Build Coastguard Worker                 const const_dict_iterator& rhs) {
123*635a8641SAndroid Build Coastguard Worker   return !(lhs == rhs);
124*635a8641SAndroid Build Coastguard Worker }
125*635a8641SAndroid Build Coastguard Worker 
126*635a8641SAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
127*635a8641SAndroid Build Coastguard Worker // dict_iterator_proxy.
128*635a8641SAndroid Build Coastguard Worker 
dict_iterator_proxy(DictStorage * storage)129*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::dict_iterator_proxy(DictStorage* storage)
130*635a8641SAndroid Build Coastguard Worker     : storage_(storage) {}
131*635a8641SAndroid Build Coastguard Worker 
begin()132*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::iterator dict_iterator_proxy::begin() {
133*635a8641SAndroid Build Coastguard Worker   return iterator(storage_->begin());
134*635a8641SAndroid Build Coastguard Worker }
135*635a8641SAndroid Build Coastguard Worker 
begin() const136*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::const_iterator dict_iterator_proxy::begin() const {
137*635a8641SAndroid Build Coastguard Worker   return const_iterator(storage_->begin());
138*635a8641SAndroid Build Coastguard Worker }
139*635a8641SAndroid Build Coastguard Worker 
end()140*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::iterator dict_iterator_proxy::end() {
141*635a8641SAndroid Build Coastguard Worker   return iterator(storage_->end());
142*635a8641SAndroid Build Coastguard Worker }
143*635a8641SAndroid Build Coastguard Worker 
end() const144*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::const_iterator dict_iterator_proxy::end() const {
145*635a8641SAndroid Build Coastguard Worker   return const_iterator(storage_->end());
146*635a8641SAndroid Build Coastguard Worker }
147*635a8641SAndroid Build Coastguard Worker 
rbegin()148*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::reverse_iterator dict_iterator_proxy::rbegin() {
149*635a8641SAndroid Build Coastguard Worker   return reverse_iterator(end());
150*635a8641SAndroid Build Coastguard Worker }
151*635a8641SAndroid Build Coastguard Worker 
rbegin() const152*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::const_reverse_iterator dict_iterator_proxy::rbegin()
153*635a8641SAndroid Build Coastguard Worker     const {
154*635a8641SAndroid Build Coastguard Worker   return const_reverse_iterator(end());
155*635a8641SAndroid Build Coastguard Worker }
156*635a8641SAndroid Build Coastguard Worker 
rend()157*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::reverse_iterator dict_iterator_proxy::rend() {
158*635a8641SAndroid Build Coastguard Worker   return reverse_iterator(begin());
159*635a8641SAndroid Build Coastguard Worker }
160*635a8641SAndroid Build Coastguard Worker 
rend() const161*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::const_reverse_iterator dict_iterator_proxy::rend() const {
162*635a8641SAndroid Build Coastguard Worker   return const_reverse_iterator(begin());
163*635a8641SAndroid Build Coastguard Worker }
164*635a8641SAndroid Build Coastguard Worker 
cbegin() const165*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::const_iterator dict_iterator_proxy::cbegin() const {
166*635a8641SAndroid Build Coastguard Worker   return const_iterator(begin());
167*635a8641SAndroid Build Coastguard Worker }
168*635a8641SAndroid Build Coastguard Worker 
cend() const169*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::const_iterator dict_iterator_proxy::cend() const {
170*635a8641SAndroid Build Coastguard Worker   return const_iterator(end());
171*635a8641SAndroid Build Coastguard Worker }
172*635a8641SAndroid Build Coastguard Worker 
crbegin() const173*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::const_reverse_iterator dict_iterator_proxy::crbegin()
174*635a8641SAndroid Build Coastguard Worker     const {
175*635a8641SAndroid Build Coastguard Worker   return const_reverse_iterator(rbegin());
176*635a8641SAndroid Build Coastguard Worker }
177*635a8641SAndroid Build Coastguard Worker 
crend() const178*635a8641SAndroid Build Coastguard Worker dict_iterator_proxy::const_reverse_iterator dict_iterator_proxy::crend() const {
179*635a8641SAndroid Build Coastguard Worker   return const_reverse_iterator(rend());
180*635a8641SAndroid Build Coastguard Worker }
181*635a8641SAndroid Build Coastguard Worker 
182*635a8641SAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
183*635a8641SAndroid Build Coastguard Worker // const_dict_iterator_proxy.
184*635a8641SAndroid Build Coastguard Worker 
const_dict_iterator_proxy(const DictStorage * storage)185*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_dict_iterator_proxy(const DictStorage* storage)
186*635a8641SAndroid Build Coastguard Worker     : storage_(storage) {}
187*635a8641SAndroid Build Coastguard Worker 
begin() const188*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_iterator const_dict_iterator_proxy::begin()
189*635a8641SAndroid Build Coastguard Worker     const {
190*635a8641SAndroid Build Coastguard Worker   return const_iterator(storage_->begin());
191*635a8641SAndroid Build Coastguard Worker }
192*635a8641SAndroid Build Coastguard Worker 
end() const193*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_iterator const_dict_iterator_proxy::end()
194*635a8641SAndroid Build Coastguard Worker     const {
195*635a8641SAndroid Build Coastguard Worker   return const_iterator(storage_->end());
196*635a8641SAndroid Build Coastguard Worker }
197*635a8641SAndroid Build Coastguard Worker 
198*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_reverse_iterator
rbegin() const199*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::rbegin() const {
200*635a8641SAndroid Build Coastguard Worker   return const_reverse_iterator(end());
201*635a8641SAndroid Build Coastguard Worker }
202*635a8641SAndroid Build Coastguard Worker 
203*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_reverse_iterator
rend() const204*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::rend() const {
205*635a8641SAndroid Build Coastguard Worker   return const_reverse_iterator(begin());
206*635a8641SAndroid Build Coastguard Worker }
207*635a8641SAndroid Build Coastguard Worker 
cbegin() const208*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_iterator const_dict_iterator_proxy::cbegin()
209*635a8641SAndroid Build Coastguard Worker     const {
210*635a8641SAndroid Build Coastguard Worker   return const_iterator(begin());
211*635a8641SAndroid Build Coastguard Worker }
212*635a8641SAndroid Build Coastguard Worker 
cend() const213*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_iterator const_dict_iterator_proxy::cend()
214*635a8641SAndroid Build Coastguard Worker     const {
215*635a8641SAndroid Build Coastguard Worker   return const_iterator(end());
216*635a8641SAndroid Build Coastguard Worker }
217*635a8641SAndroid Build Coastguard Worker 
218*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_reverse_iterator
crbegin() const219*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::crbegin() const {
220*635a8641SAndroid Build Coastguard Worker   return const_reverse_iterator(rbegin());
221*635a8641SAndroid Build Coastguard Worker }
222*635a8641SAndroid Build Coastguard Worker 
223*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::const_reverse_iterator
crend() const224*635a8641SAndroid Build Coastguard Worker const_dict_iterator_proxy::crend() const {
225*635a8641SAndroid Build Coastguard Worker   return const_reverse_iterator(rend());
226*635a8641SAndroid Build Coastguard Worker }
227*635a8641SAndroid Build Coastguard Worker 
228*635a8641SAndroid Build Coastguard Worker }  // namespace detail
229*635a8641SAndroid Build Coastguard Worker 
230*635a8641SAndroid Build Coastguard Worker }  // namespace base
231