Added boost header
This commit is contained in:
108
test/external/boost/xpressive/detail/utility/any.hpp
vendored
Normal file
108
test/external/boost/xpressive/detail/utility/any.hpp
vendored
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user