1 // Boost.Geometry (aka GGL, Generic Geometry Library) 2 3 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. 4 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. 5 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. 6 7 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library 8 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. 9 10 // Use, modification and distribution is subject to the Boost Software License, 11 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 12 // http://www.boost.org/LICENSE_1_0.txt) 13 14 #ifndef BOOST_GEOMETRY_ITERATORS_BASE_HPP 15 #define BOOST_GEOMETRY_ITERATORS_BASE_HPP 16 17 #include <boost/iterator.hpp> 18 #include <boost/iterator/iterator_adaptor.hpp> 19 #include <boost/iterator/iterator_categories.hpp> 20 #include <boost/mpl/if.hpp> 21 22 #ifndef DOXYGEN_NO_DETAIL 23 namespace boost { namespace geometry { namespace detail { namespace iterators 24 { 25 26 template 27 < 28 typename DerivedClass, 29 typename Iterator, 30 typename TraversalFlag = boost::bidirectional_traversal_tag 31 > 32 struct iterator_base 33 : public boost::iterator_adaptor 34 < 35 DerivedClass, 36 Iterator, 37 boost::use_default, 38 typename boost::mpl::if_ 39 < 40 boost::is_convertible 41 < 42 typename boost::iterator_traversal<Iterator>::type, 43 boost::random_access_traversal_tag 44 >, 45 TraversalFlag, 46 boost::use_default 47 >::type 48 > 49 { 50 // Define operator cast to Iterator to be able to write things like Iterator it = myit++ operator Iteratorboost::geometry::detail::iterators::iterator_base51 inline operator Iterator() const 52 { 53 return this->base(); 54 } 55 56 /*inline bool operator==(Iterator const& other) const 57 { 58 return this->base() == other; 59 } 60 inline bool operator!=(Iterator const& other) const 61 { 62 return ! operator==(other); 63 }*/ 64 }; 65 66 }}}} // namespace boost::geometry::detail::iterators 67 #endif 68 69 70 #endif // BOOST_GEOMETRY_ITERATORS_BASE_HPP 71