diff options
Diffstat (limited to 'libcxx/test/std/strings/basic.string/input_iterator.h')
-rw-r--r-- | libcxx/test/std/strings/basic.string/input_iterator.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libcxx/test/std/strings/basic.string/input_iterator.h b/libcxx/test/std/strings/basic.string/input_iterator.h new file mode 100644 index 00000000000..fa6bb80a149 --- /dev/null +++ b/libcxx/test/std/strings/basic.string/input_iterator.h @@ -0,0 +1,41 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef INPUT_ITERATOR_H +#define INPUT_ITERATOR_H + +#include <iterator> + +template <class It> +class input_iterator +{ + It it_; +public: + typedef typename std::input_iterator_tag iterator_category; + typedef typename std::iterator_traits<It>::value_type value_type; + typedef typename std::iterator_traits<It>::difference_type difference_type; + typedef It pointer; + typedef typename std::iterator_traits<It>::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 |