// Copyright 2017 The Chromium Authors // 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" #include "base/values.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); } } // namespace detail } // namespace base