#ifndef BOOST_METAPARSE_V1_IMPL_STRING_ITERATOR_HPP #define BOOST_METAPARSE_V1_IMPL_STRING_ITERATOR_HPP // Copyright Abel Sinkovics (abel@sinkovics.hu) 2013. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include namespace boost { namespace metaparse { namespace v1 { namespace impl { // string_iterator template struct string_iterator { typedef string_iterator type; typedef string_iterator_tag tag; typedef boost::mpl::random_access_iterator_tag category; }; // advance_c template struct advance_c; template struct advance_c, P> : string_iterator {}; // distance template struct distance; template struct distance, string_iterator > : boost::mpl::int_ {}; } } } } namespace boost { namespace mpl { // advance template struct advance_impl; template <> struct advance_impl { typedef advance_impl type; template struct apply : boost::metaparse::v1::impl::advance_c< typename S::type, N::type::value > {}; }; // distance template struct distance_impl; template <> struct distance_impl { typedef distance_impl type; template struct apply : boost::metaparse::v1::impl::distance< typename A::type, typename B::type > {}; }; // next template struct next; template struct next > : boost::metaparse::v1::impl::string_iterator {}; // prior template struct prior; template struct prior > : boost::metaparse::v1::impl::string_iterator {}; // deref template struct deref; template struct deref > : boost::metaparse::v1::impl::at_c {}; // equal_to template struct equal_to_impl; template <> struct equal_to_impl< boost::metaparse::v1::impl::string_iterator_tag, boost::metaparse::v1::impl::string_iterator_tag > { typedef equal_to_impl type; template struct apply : is_same {}; }; template struct equal_to_impl { typedef equal_to_impl type; template struct apply : false_ {}; }; template struct equal_to_impl : equal_to_impl {}; } } #endif