Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // any.hpp Chris@16: // Chris@16: // Copyright 2008 Eric Niebler. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_XPRESSIVE_DETAIL_UTILITY_ANY_HPP_EAN_11_19_2005 Chris@16: #define BOOST_XPRESSIVE_DETAIL_UTILITY_ANY_HPP_EAN_11_19_2005 Chris@16: Chris@16: #include Chris@16: Chris@16: #if BOOST_VERSION >= 103300 Chris@16: Chris@16: // In Boost 1.33+, we have a cons list in Fusion, so just include it. Chris@16: Chris@16: # if BOOST_VERSION >= 103500 Chris@16: # include // Boost 1.35+ has Fusion2 Chris@16: # else Chris@16: # include // Fusion1 Chris@16: # endif Chris@16: Chris@16: #else Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: namespace boost { namespace fusion Chris@16: { Chris@16: Chris@16: namespace detail Chris@16: { Chris@16: template Chris@16: inline bool Chris@16: any(First const&, Last const&, F const&, mpl::true_) Chris@16: { Chris@16: return false; Chris@16: } Chris@16: Chris@16: template Chris@16: inline bool Chris@16: any(First const& first, Last const& last, F const& f, mpl::false_) Chris@16: { Chris@16: if(f(*first)) Chris@16: return true; Chris@16: return detail::any(fusion::next(first), last, f Chris@16: , meta::equal_to::type, Last>()); Chris@16: } Chris@16: } Chris@16: Chris@16: namespace meta Chris@16: { Chris@16: template Chris@16: struct any Chris@16: { Chris@16: typedef bool type; Chris@16: }; Chris@16: } Chris@16: Chris@16: namespace function Chris@16: { Chris@16: struct any Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: typedef bool type; Chris@16: }; Chris@16: Chris@16: template Chris@16: inline bool Chris@16: operator()(Sequence const& seq, F const& f) const Chris@16: { Chris@16: return detail::any( Chris@16: fusion::begin(seq) Chris@16: , fusion::end(seq) Chris@16: , f Chris@16: , meta::equal_to< Chris@16: BOOST_DEDUCED_TYPENAME meta::begin::type Chris@16: , BOOST_DEDUCED_TYPENAME meta::end::type>()); Chris@16: } Chris@16: Chris@16: template Chris@16: inline bool Chris@16: operator()(Sequence& seq, F const& f) const Chris@16: { Chris@16: return detail::any( Chris@16: fusion::begin(seq) Chris@16: , fusion::end(seq) Chris@16: , f Chris@16: , meta::equal_to< Chris@16: BOOST_DEDUCED_TYPENAME meta::begin::type Chris@16: , BOOST_DEDUCED_TYPENAME meta::end::type>()); Chris@16: } Chris@16: }; Chris@16: } Chris@16: Chris@16: function::any const any = function::any(); Chris@16: }} Chris@16: Chris@16: #endif Chris@16: Chris@16: #endif