Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/xpressive/detail/utility/any.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/xpressive/detail/utility/any.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,108 @@ +/////////////////////////////////////////////////////////////////////////////// +// any.hpp +// +// Copyright 2008 Eric Niebler. 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) + +#ifndef BOOST_XPRESSIVE_DETAIL_UTILITY_ANY_HPP_EAN_11_19_2005 +#define BOOST_XPRESSIVE_DETAIL_UTILITY_ANY_HPP_EAN_11_19_2005 + +#include <boost/version.hpp> + +#if BOOST_VERSION >= 103300 + +// In Boost 1.33+, we have a cons list in Fusion, so just include it. + +# if BOOST_VERSION >= 103500 +# include <boost/fusion/include/any.hpp> // Boost 1.35+ has Fusion2 +# else +# include <boost/spirit/fusion/algorithm/any.hpp> // Fusion1 +# endif + +#else + +# include <boost/spirit/fusion/sequence/begin.hpp> +# include <boost/spirit/fusion/sequence/end.hpp> +# include <boost/spirit/fusion/iterator/equal_to.hpp> +# include <boost/mpl/bool.hpp> +# include <boost/spirit/fusion/iterator/equal_to.hpp> +# include <boost/spirit/fusion/iterator/next.hpp> +# include <boost/spirit/fusion/iterator/deref.hpp> + +namespace boost { namespace fusion +{ + + namespace detail + { + template <typename First, typename Last, typename F> + inline bool + any(First const&, Last const&, F const&, mpl::true_) + { + return false; + } + + template <typename First, typename Last, typename F> + inline bool + any(First const& first, Last const& last, F const& f, mpl::false_) + { + if(f(*first)) + return true; + return detail::any(fusion::next(first), last, f + , meta::equal_to<BOOST_DEDUCED_TYPENAME meta::next<First>::type, Last>()); + } + } + + namespace meta + { + template <typename Sequence, typename F> + struct any + { + typedef bool type; + }; + } + + namespace function + { + struct any + { + template <typename Sequence, typename F> + struct apply + { + typedef bool type; + }; + + template <typename Sequence, typename F> + inline bool + operator()(Sequence const& seq, F const& f) const + { + return detail::any( + fusion::begin(seq) + , fusion::end(seq) + , f + , meta::equal_to< + BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type + , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>()); + } + + template <typename Sequence, typename F> + inline bool + operator()(Sequence& seq, F const& f) const + { + return detail::any( + fusion::begin(seq) + , fusion::end(seq) + , f + , meta::equal_to< + BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type + , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>()); + } + }; + } + + function::any const any = function::any(); +}} + +#endif + +#endif