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 + -
显示快捷键?