1 // Boost.Range library 2 // 3 // Copyright Neil Groves 2014. Use, modification and distribution is subject 4 // to the Boost Software License, Version 1.0. (See accompanying file 5 // LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 // 8 // For more information, see http://www.boost.org/libs/range 9 // 10 #ifndef BOOST_RANGE_UNIT_TEST_ADAPTOR_MOCK_ITERATOR_HPP_INCLUDED 11 #define BOOST_RANGE_UNIT_TEST_ADAPTOR_MOCK_ITERATOR_HPP_INCLUDED 12 13 #include <boost/iterator/iterator_facade.hpp> 14 15 namespace boost 16 { 17 namespace range 18 { 19 namespace unit_test 20 { 21 22 template<typename TraversalTag> 23 class mock_iterator 24 : public boost::iterator_facade< 25 mock_iterator<TraversalTag>, 26 int, 27 TraversalTag, 28 const int& 29 > 30 { 31 public: mock_iterator()32 mock_iterator() 33 : m_value(0) 34 { 35 } 36 mock_iterator(int value)37 explicit mock_iterator(int value) 38 : m_value(value) 39 { 40 } 41 42 private: 43 increment()44 void increment() 45 { 46 ++m_value; 47 } 48 decrement()49 void decrement() 50 { 51 --m_value; 52 } 53 equal(const mock_iterator & other) const54 bool equal(const mock_iterator& other) const 55 { 56 return m_value == other.m_value; 57 } 58 advance(std::ptrdiff_t offset)59 void advance(std::ptrdiff_t offset) 60 { 61 m_value += offset; 62 } 63 distance_to(const mock_iterator & other) const64 std::ptrdiff_t distance_to(const mock_iterator& other) const 65 { 66 return other.m_value - m_value; 67 } 68 dereference() const69 const int& dereference() const 70 { 71 return m_value; 72 } 73 74 int m_value; 75 friend class boost::iterator_core_access; 76 }; 77 78 } // namespace unit_test 79 } // namespace range 80 } // namespace boost 81 82 #endif // include guard 83