manage_additional_parameters.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 + -