| // Copyright 2017 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "base/value_iterators.h" | |
| namespace base { | |
| namespace detail { | |
| // ---------------------------------------------------------------------------- | |
| // dict_iterator. | |
| dict_iterator::pointer::pointer(const reference& ref) : ref_(ref) {} | |
| dict_iterator::pointer::pointer(const pointer& ptr) = default; | |
| dict_iterator::dict_iterator(DictStorage::iterator dict_iter) | |
| : dict_iter_(dict_iter) {} | |
| dict_iterator::dict_iterator(const dict_iterator& dict_iter) = default; | |
| dict_iterator& dict_iterator::operator=(const dict_iterator& dict_iter) = | |
| default; | |
| dict_iterator::~dict_iterator() = default; | |
| dict_iterator::reference dict_iterator::operator*() { | |
| return {dict_iter_->first, *dict_iter_->second}; | |
| } | |
| dict_iterator::pointer dict_iterator::operator->() { | |
| return pointer(operator*()); | |
| } | |
| dict_iterator& dict_iterator::operator++() { | |
| ++dict_iter_; | |
| return *this; | |
| } | |
| dict_iterator dict_iterator::operator++(int) { | |
| dict_iterator tmp(*this); | |
| ++dict_iter_; | |
| return tmp; | |
| } | |
| dict_iterator& dict_iterator::operator--() { | |
| --dict_iter_; | |
| return *this; | |
| } | |
| dict_iterator dict_iterator::operator--(int) { | |
| dict_iterator tmp(*this); | |
| --dict_iter_; | |
| return tmp; | |
| } | |
| bool operator==(const dict_iterator& lhs, const dict_iterator& rhs) { | |
| return lhs.dict_iter_ == rhs.dict_iter_; | |
| } | |
| bool operator!=(const dict_iterator& lhs, const dict_iterator& rhs) { | |
| return !(lhs == rhs); | |
| } | |
| // ---------------------------------------------------------------------------- | |
| // const_dict_iterator. | |
| const_dict_iterator::pointer::pointer(const reference& ref) : ref_(ref) {} | |
| const_dict_iterator::pointer::pointer(const pointer& ptr) = default; | |
| const_dict_iterator::const_dict_iterator(DictStorage::const_iterator dict_iter) | |
| : dict_iter_(dict_iter) {} | |
| const_dict_iterator::const_dict_iterator(const const_dict_iterator& dict_iter) = | |
| default; | |
| const_dict_iterator& const_dict_iterator::operator=( | |
| const const_dict_iterator& dict_iter) = default; | |
| const_dict_iterator::~const_dict_iterator() = default; | |
| const_dict_iterator::reference const_dict_iterator::operator*() const { | |
| return {dict_iter_->first, *dict_iter_->second}; | |
| } | |
| const_dict_iterator::pointer const_dict_iterator::operator->() const { | |
| return pointer(operator*()); | |
| } | |
| const_dict_iterator& const_dict_iterator::operator++() { | |
| ++dict_iter_; | |
| return *this; | |
| } | |
| const_dict_iterator const_dict_iterator::operator++(int) { | |
| const_dict_iterator tmp(*this); | |
| ++dict_iter_; | |
| return tmp; | |
| } | |
| const_dict_iterator& const_dict_iterator::operator--() { | |
| --dict_iter_; | |
| return *this; | |
| } | |
| const_dict_iterator const_dict_iterator::operator--(int) { | |
| const_dict_iterator tmp(*this); | |
| --dict_iter_; | |
| return tmp; | |
| } | |
| bool operator==(const const_dict_iterator& lhs, | |
| const const_dict_iterator& rhs) { | |
| return lhs.dict_iter_ == rhs.dict_iter_; | |
| } | |
| bool operator!=(const const_dict_iterator& lhs, | |
| const const_dict_iterator& rhs) { | |
| return !(lhs == rhs); | |
| } | |
| // ---------------------------------------------------------------------------- | |
| // dict_iterator_proxy. | |
| dict_iterator_proxy::dict_iterator_proxy(DictStorage* storage) | |
| : storage_(storage) {} | |
| dict_iterator_proxy::iterator dict_iterator_proxy::begin() { | |
| return iterator(storage_->begin()); | |
| } | |
| dict_iterator_proxy::const_iterator dict_iterator_proxy::begin() const { | |
| return const_iterator(storage_->begin()); | |
| } | |
| dict_iterator_proxy::iterator dict_iterator_proxy::end() { | |
| return iterator(storage_->end()); | |
| } | |
| dict_iterator_proxy::const_iterator dict_iterator_proxy::end() const { | |
| return const_iterator(storage_->end()); | |
| } | |
| dict_iterator_proxy::reverse_iterator dict_iterator_proxy::rbegin() { | |
| return reverse_iterator(end()); | |
| } | |
| dict_iterator_proxy::const_reverse_iterator dict_iterator_proxy::rbegin() | |
| const { | |
| return const_reverse_iterator(end()); | |
| } | |
| dict_iterator_proxy::reverse_iterator dict_iterator_proxy::rend() { | |
| return reverse_iterator(begin()); | |
| } | |
| dict_iterator_proxy::const_reverse_iterator dict_iterator_proxy::rend() const { | |
| return const_reverse_iterator(begin()); | |
| } | |
| dict_iterator_proxy::const_iterator dict_iterator_proxy::cbegin() const { | |
| return const_iterator(begin()); | |
| } | |
| dict_iterator_proxy::const_iterator dict_iterator_proxy::cend() const { | |
| return const_iterator(end()); | |
| } | |
| dict_iterator_proxy::const_reverse_iterator dict_iterator_proxy::crbegin() | |
| const { | |
| return const_reverse_iterator(rbegin()); | |
| } | |
| dict_iterator_proxy::const_reverse_iterator dict_iterator_proxy::crend() const { | |
| return const_reverse_iterator(rend()); | |
| } | |
| // ---------------------------------------------------------------------------- | |
| // const_dict_iterator_proxy. | |
| const_dict_iterator_proxy::const_dict_iterator_proxy(const DictStorage* storage) | |
| : storage_(storage) {} | |
| const_dict_iterator_proxy::const_iterator const_dict_iterator_proxy::begin() | |
| const { | |
| return const_iterator(storage_->begin()); | |
| } | |
| const_dict_iterator_proxy::const_iterator const_dict_iterator_proxy::end() | |
| const { | |
| return const_iterator(storage_->end()); | |
| } | |
| const_dict_iterator_proxy::const_reverse_iterator | |
| const_dict_iterator_proxy::rbegin() const { | |
| return const_reverse_iterator(end()); | |
| } | |
| const_dict_iterator_proxy::const_reverse_iterator | |
| const_dict_iterator_proxy::rend() const { | |
| return const_reverse_iterator(begin()); | |
| } | |
| const_dict_iterator_proxy::const_iterator const_dict_iterator_proxy::cbegin() | |
| const { | |
| return const_iterator(begin()); | |
| } | |
| const_dict_iterator_proxy::const_iterator const_dict_iterator_proxy::cend() | |
| const { | |
| return const_iterator(end()); | |
| } | |
| const_dict_iterator_proxy::const_reverse_iterator | |
| const_dict_iterator_proxy::crbegin() const { | |
| return const_reverse_iterator(rbegin()); | |
| } | |
| const_dict_iterator_proxy::const_reverse_iterator | |
| const_dict_iterator_proxy::crend() const { | |
| return const_reverse_iterator(rend()); | |
| } | |
| } // namespace detail | |
| } // namespace base |