diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/stdapis/boost/lambda/detail/arity_code.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/epoc32/include/stdapis/boost/lambda/detail/arity_code.hpp Tue Mar 16 16:12:26 2010 +0000 @@ -0,0 +1,110 @@ +// -- Boost Lambda Library ------------------------------------------------- + +// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi) +// +// 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) +// +// For more information, see www.boost.org + +// -------------------------------------------------- + +#ifndef BOOST_LAMBDA_ARITY_CODE_HPP +#define BOOST_LAMBDA_ARITY_CODE_HPP + +#include "boost/type_traits/cv_traits.hpp" +#include "boost/type_traits/transform_traits.hpp" + +namespace boost { +namespace lambda { + +// These constants state, whether a lambda_functor instantiation results from +// an expression which contains no placeholders (NONE), +// only free1 placeholders (FIRST), +// free2 placeholders and maybe free1 placeholders (SECOND), +// free3 and maybe free1 and free2 placeholders (THIRD), +// freeE placeholders and maybe free1 and free2 (EXCEPTION). +// RETHROW means, that a rethrow expression is used somewhere in the lambda_functor. + +enum { NONE = 0x00, // Notice we are using bits as flags here. + FIRST = 0x01, + SECOND = 0x02, + THIRD = 0x04, + EXCEPTION = 0x08, + RETHROW = 0x10}; + + +template +struct get_tuple_arity; + +namespace detail { + +template struct get_arity_; + +} // end detail; + +template struct get_arity { + + BOOST_STATIC_CONSTANT(int, value = detail::get_arity_::type>::type>::value); + +}; + +namespace detail { + +template +struct get_arity_ { + BOOST_STATIC_CONSTANT(int, value = 0); +}; + +template +struct get_arity_ > { + BOOST_STATIC_CONSTANT(int, value = get_arity::value); +}; + +template +struct get_arity_ > { + BOOST_STATIC_CONSTANT(int, value = get_tuple_arity::value); +}; + +template +struct get_arity_ > { + BOOST_STATIC_CONSTANT(int, value = I); +}; + +} // detail + +template +struct get_tuple_arity { + BOOST_STATIC_CONSTANT(int, value = get_arity::value | get_tuple_arity::value); +}; + + +template<> +struct get_tuple_arity { + BOOST_STATIC_CONSTANT(int, value = 0); +}; + + + // Does T have placeholder as it's subexpression? + +template +struct has_placeholder { + BOOST_STATIC_CONSTANT(bool, value = (get_arity::value & I) != 0); +}; + +template +struct includes_placeholder { + BOOST_STATIC_CONSTANT(bool, value = (J & I) != 0); +}; + +template +struct lacks_placeholder { + BOOST_STATIC_CONSTANT(bool, value = ((J & I) == 0)); +}; + + +} // namespace lambda +} // namespace boost + +#endif