at_impl.hpp

来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 124 行

HPP
124
字号
#ifndef BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED#define BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED// Copyright Aleksey Gurtovoy 2003-2004// Copyright David Abrahams 2003-2004//// 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)//// See http://www.boost.org/libs/mpl for documentation.// $Source: /CVSROOT/CGAL/Packages/Boost/include/boost/mpl/map/aux_/at_impl.hpp,v $// $Date: 2004/11/20 10:42:12 $// $Revision: 1.1.1.1 $#include <boost/mpl/at_fwd.hpp>#include <boost/mpl/long.hpp>#include <boost/mpl/map/aux_/tag.hpp>#include <boost/mpl/aux_/order_impl.hpp>#include <boost/mpl/aux_/overload_names.hpp>#include <boost/mpl/aux_/type_wrapper.hpp>#include <boost/mpl/aux_/ptr_to_ref.hpp>#include <boost/mpl/aux_/static_cast.hpp>#include <boost/mpl/aux_/config/typeof.hpp>#if !defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)#   include <boost/mpl/eval_if.hpp>#   include <boost/mpl/pair.hpp>#   include <boost/mpl/void.hpp>#   include <boost/mpl/aux_/config/static_constant.hpp>#endifnamespace boost { namespace mpl {#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)template< typename Map, typename Key >struct m_at{    typedef aux::type_wrapper<Key> key_;    typedef __typeof__( BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(          Map        , BOOST_MPL_AUX_STATIC_CAST(key_*, 0)        ) ) type;};template<>struct at_impl< aux::map_tag >{    template< typename Map, typename Key > struct apply        : aux::wrapped_type< typename m_at<              Map            , Key            >::type >    {    };};// agurt 31/jan/04: two-step implementation for the sake of GCC 3.xtemplate< typename Map, long order > struct item_by_order_impl{    typedef __typeof__( BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(          Map         , BOOST_MPL_AUX_STATIC_CAST(long_<order>*, 0)        ) ) type;};template< typename Map, long order >struct item_by_order    : aux::wrapped_type<          typename item_by_order_impl<Map,order>::type        >{};#else // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCEStemplate< typename Map, long n > struct m_at{    typedef void_ type;};template<>struct at_impl< aux::map_tag >{    template< typename Map, typename Key > struct apply    {        typedef typename m_at< Map, (x_order_impl<Map,Key>::value - 2) >::type item_;               typedef typename eval_if<              is_void_<item_>            , void_            , second<item_>            >::type type;    };};template< typename Map, long order > struct is_item_masked{    BOOST_STATIC_CONSTANT(bool, value =           sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(              Map            , BOOST_MPL_AUX_STATIC_CAST(long_<order>*, 0)            ) ) == sizeof(aux::yes_tag)        );};template< typename Map, long order > struct item_by_order{        typedef typename eval_if_c<           is_item_masked<Map,order>::value        , void_        , m_at<Map,(order - 2)>        >::type type;};#endif}}#endif // BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?