欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

manage_additional_parameters.hpp

Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
HPP
字号:
// Boost.Bimap//// Copyright (c) 2006-2007 Matias Capeletto//// 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)/// \file detail/manage_additional_parameters.hpp/// \brief Utility class to extract the additional parameters from the template parameters.#ifndef BOOST_BIMAP_DETAIL_MANAGE_ADDITIONAL_PARAMETERS_HPP#define BOOST_BIMAP_DETAIL_MANAGE_ADDITIONAL_PARAMETERS_HPP#if defined(_MSC_VER) && (_MSC_VER>=1200)#pragma once#endif#include <boost/config.hpp>#include <memory>// Boost.MPL#include <boost/mpl/bool.hpp>#include <boost/mpl/if.hpp>#include <boost/mpl/aux_/na.hpp>#include <boost/type_traits/is_same.hpp>#include <boost/bimap/detail/is_set_type_of.hpp>namespace boost {namespace bimaps {template< class Type >struct with_info{    typedef Type value_type;};namespace detail {/// \brief Metafunction to check if a given type is a data_hook specification.template< class Type >struct is_with_info : ::boost::mpl::false_ {};template< class ValueType >struct is_with_info< with_info<ValueType> > : ::boost::mpl::true_ {};/** \struct boost::bimaps::detail::manage_additional_parameters\brief Utility class to extract the additional parameters from the template parameters.\codetemplate< class AP1, class AP2, class AP3 >struct manage_additional_parameters{    struct parameters    {        typedef -unspecified- set_type_of_relation;        typedef -unspecified- data_hook;        typedef -unspecified- allocator;    };    typedef parameters type;};\endcodeSee also bimap, bimap_core.                                                                                **/#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINEStemplate< class AP1, class AP2, class AP3 >struct manage_additional_parameters{    // (1) manage_additional_parameters<    //         not_specified,not_specified,not_specified>    //    //     set_type_of_relation: based on the left key type    //     info_hook:            no additional info    //     allocator:            default allocator    struct case_NNN    {        typedef left_based set_type_of_relation;        typedef std::allocator<void> allocator;        typedef ::boost::mpl::na additional_info;    };    // (2) manage_additional_parameters<Allocator,not_specified,not_specified>    //    //     set_type_of_relation: based on the left key type    //     info_hook:            no additional info    //     allocator:            Allocator    struct case_ANN    {        typedef left_based set_type_of_relation;        typedef AP1 allocator;        typedef ::boost::mpl::na additional_info;    };    // (3) manage_additional_parameters<    //         SetOfRelationType,not_specified,not_specified>    //    //     set_type_of_relation: SetTypeOfRelation    //     info_hook:            no additional info    //     allocator:            default allocator    struct case_SNN    {        typedef AP1 set_type_of_relation;        typedef std::allocator<void> allocator;        typedef ::boost::mpl::na additional_info;    };    // (4) manage_additional_parameters<    //          SetTypeOfRelation,Allocator,not_specified>    //    //     set_type_of_relation: SetTypeOfRelation    //     info_hook:            no additional info    //     allocator:            Allocator    struct case_SAN    {        typedef AP1 set_type_of_relation;        typedef AP2 allocator;        typedef ::boost::mpl::na additional_info;    };    // (5) manage_additional_parameters<InfoToHook,not_specified,not_specified>    //    //     set_type_of_relation: based on the left key type    //     info_hook:            InfoToHook    //     allocator:            default allocator    struct case_HNN    {        typedef left_based set_type_of_relation;        typedef std::allocator<void> allocator;        typedef BOOST_DEDUCED_TYPENAME AP1::value_type additional_info;    };    // (6) manage_additional_parameters<    //         SetTypeOfRelation,InfoToHook,not_specified>    //    //     set_type_of_relation: SetTypeOfRelation    //     info_hook:            InfoToHook    //     allocator:            default allocator    struct case_SHN    {        typedef AP1 set_type_of_relation;        typedef std::allocator<void> allocator;        typedef BOOST_DEDUCED_TYPENAME AP2::value_type additional_info;    };    // (7) manage_additional_parameters<    //         DataToHook,Allocator,not_specified>    //    //     set_type_of_relation: SetTypeOfRelation    //     info_hook:            InfoToHook    //     allocator:            default allocator    struct case_HAN    {        typedef left_based set_type_of_relation;        typedef AP2 allocator;        typedef BOOST_DEDUCED_TYPENAME AP1::value_type additional_info;    };    // (8) manage_additional_parameters<    //         SetTypeOfRelation,DataToHook,Allocator>    //    //     set_type_of_relation: SetTypeOfRelation    //     info_hook:            InfoToHook    //     allocator:            Allocator    struct case_SHA    {        typedef AP1 set_type_of_relation;        typedef AP2 allocator;        typedef BOOST_DEDUCED_TYPENAME AP2::value_type additional_info;    };    // Some annidated mpl::if_ and we are done!    typedef BOOST_DEDUCED_TYPENAME mpl::if_    <        ::boost::mpl::is_na<AP1>,        case_NNN, // (1)        BOOST_DEDUCED_TYPENAME mpl::if_        <            ::boost::mpl::is_na<AP2>,            BOOST_DEDUCED_TYPENAME mpl::if_            <                is_set_type_of_relation<AP1>,                case_SNN, // (3)                BOOST_DEDUCED_TYPENAME mpl::if_                <                    is_with_info<AP1>,                    case_HNN, // (5)                    case_ANN  // (2)                >::type            >::type,            BOOST_DEDUCED_TYPENAME mpl::if_            <                ::boost::mpl::is_na<AP3>,                BOOST_DEDUCED_TYPENAME mpl::if_                <                    is_with_info<AP1>,                    case_HAN, // (7)                    BOOST_DEDUCED_TYPENAME mpl::if_                    <                        is_with_info<AP2>,                        case_SHN, // (6)                        case_SAN  // (4)                    >::type                >::type,                case_SHA // (8)            >::type        >::type    >::type type;};#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES} // namespace detail} // namespace bimaps} // namespace boost#endif // BOOST_BIMAP_DETAIL_MANAGE_ADDITIONAL_PARAMETERS_HPP

⌨️ 快捷键说明

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