//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef INPUT_ITERATOR_H #define INPUT_ITERATOR_H #include template class input_iterator { It it_; public: typedef typename std::input_iterator_tag iterator_category; typedef typename std::iterator_traits::value_type value_type; typedef typename std::iterator_traits::difference_type difference_type; typedef It pointer; typedef typename std::iterator_traits::reference reference; input_iterator() : it_() {} explicit input_iterator(It it) : it_(it) {} reference operator*() const {return *it_;} pointer operator->() const {return it_;} input_iterator& operator++() {++it_; return *this;} input_iterator operator++(int) {input_iterator tmp(*this); ++(*this); return tmp;} friend bool operator==(const input_iterator& x, const input_iterator& y) {return x.it_ == y.it_;} friend bool operator!=(const input_iterator& x, const input_iterator& y) {return !(x == y);} }; #endif // INPUT_ITERATOR_H