Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/fusion/iterator/next.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/fusion/iterator/next.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,63 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(FUSION_NEXT_05042005_1101) +#define FUSION_NEXT_05042005_1101 + +#include <boost/fusion/support/tag_of.hpp> + +namespace boost { namespace fusion +{ + // Special tags: + struct iterator_facade_tag; // iterator facade tag + struct boost_array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + + namespace extension + { + template <typename Tag> + struct next_impl + { + template <typename Iterator> + struct apply {}; + }; + + template <> + struct next_impl<iterator_facade_tag> + { + template <typename Iterator> + struct apply : Iterator::template next<Iterator> {}; + }; + + template <> + struct next_impl<boost_array_iterator_tag>; + + template <> + struct next_impl<mpl_iterator_tag>; + + template <> + struct next_impl<std_pair_iterator_tag>; + } + + namespace result_of + { + template <typename Iterator> + struct next + : extension::next_impl<typename detail::tag_of<Iterator>::type>:: + template apply<Iterator> + {}; + } + + template <typename Iterator> + typename result_of::next<Iterator>::type const + next(Iterator const& i) + { + return result_of::next<Iterator>::call(i); + } +}} + +#endif