x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
structured_pair.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\bimap\relation\structured_pair.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 relation/structured_pair.hpp /// \brief Defines the structured_pair class. #ifndef BOOST_BIMAP_RELATION_STRUCTURED_PAIR_HPP #define BOOST_BIMAP_RELATION_STRUCTURED_PAIR_HPP #if defined(_MSC_VER) && (_MSC_VER>=1200) #pragma once #endif #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace bimaps { namespace relation { namespace detail { /// \brief Storage definition of the left view of a mutant relation. /** See also storage_finder, mirror_storage. **/ template< class FirstType, class SecondType > class normal_storage : public symmetrical_base
{ typedef symmetrical_base
base_; public: typedef normal_storage storage_; typedef BOOST_DEDUCED_TYPENAME base_::left_value_type first_type; typedef BOOST_DEDUCED_TYPENAME base_::right_value_type second_type; first_type first; second_type second; normal_storage() {} normal_storage(BOOST_DEDUCED_TYPENAME ::boost::call_traits< first_type >::param_type f, BOOST_DEDUCED_TYPENAME ::boost::call_traits< second_type>::param_type s) : first(f), second(s) {} BOOST_DEDUCED_TYPENAME base_:: left_value_type & get_left() { return first; } const BOOST_DEDUCED_TYPENAME base_:: left_value_type & get_left()const { return first; } BOOST_DEDUCED_TYPENAME base_::right_value_type & get_right() { return second; } const BOOST_DEDUCED_TYPENAME base_::right_value_type & get_right()const { return second; } }; /// \brief Storage definition of the right view of a mutant relation. /** See also storage_finder, normal_storage. **/ template< class FirstType, class SecondType > class mirror_storage : public symmetrical_base
{ typedef symmetrical_base
base_; public: typedef mirror_storage storage_; typedef BOOST_DEDUCED_TYPENAME base_::left_value_type second_type; typedef BOOST_DEDUCED_TYPENAME base_::right_value_type first_type; second_type second; first_type first; mirror_storage() {} mirror_storage(BOOST_DEDUCED_TYPENAME ::boost::call_traits
::param_type f, BOOST_DEDUCED_TYPENAME ::boost::call_traits
::param_type s) : second(s), first(f) {} BOOST_DEDUCED_TYPENAME base_:: left_value_type & get_left() { return second; } const BOOST_DEDUCED_TYPENAME base_:: left_value_type & get_left()const { return second; } BOOST_DEDUCED_TYPENAME base_::right_value_type & get_right() { return first; } const BOOST_DEDUCED_TYPENAME base_::right_value_type & get_right()const { return first; } }; /** \struct boost::bimaps::relation::storage_finder \brief Obtain the a storage with the correct layout. \code template< class FirstType, class SecondType, class Layout > struct storage_finder { typedef {normal/mirror}_storage
type; }; \endcode See also normal_storage, mirror_storage. **/ #ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES template < class FirstType, class SecondType, class Layout > struct storage_finder { typedef normal_storage
type; }; template < class FirstType, class SecondType > struct storage_finder
{ typedef mirror_storage
type; }; #endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES template< class TA, class TB, class Info, class Layout > class pair_info_hook : public ::boost::bimaps::relation::detail::storage_finder
::type { typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::relation::detail::storage_finder
::type base_; typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::tags::support:: default_tagged
::type tagged_info_type; public: typedef BOOST_DEDUCED_TYPENAME tagged_info_type::value_type info_type; typedef BOOST_DEDUCED_TYPENAME tagged_info_type::tag info_tag; info_type info; protected: pair_info_hook() {} pair_info_hook( BOOST_DEDUCED_TYPENAME ::boost::call_traits< BOOST_DEDUCED_TYPENAME base_::first_type >::param_type f, BOOST_DEDUCED_TYPENAME ::boost::call_traits< BOOST_DEDUCED_TYPENAME base_::second_type >::param_type s, BOOST_DEDUCED_TYPENAME ::boost::call_traits< info_type >::param_type i = info_type() ) : base_(f,s), info(i) {} template< class Pair > pair_info_hook( const Pair & p) : base_(p.first,p.second), info(p.info) {} template< class Pair > void change_to( const Pair & p ) { base_::first = p.first ; base_::second = p.second; info = p.info ; } void clear_info() { info = info_type(); }; }; template< class TA, class TB, class Layout> class pair_info_hook
: public ::boost::bimaps::relation::detail::storage_finder
::type { typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::relation::detail::storage_finder
::type base_; public: typedef ::boost::mpl::na info_type; typedef member_at::info info_tag; protected: pair_info_hook() {} pair_info_hook( BOOST_DEDUCED_TYPENAME ::boost::call_traits< BOOST_DEDUCED_TYPENAME base_::first_type >::param_type f, BOOST_DEDUCED_TYPENAME ::boost::call_traits< BOOST_DEDUCED_TYPENAME base_::second_type >::param_type s) : base_(f,s) {} template< class Pair > pair_info_hook( const Pair & p ) : base_(p.first,p.second) {} template< class Pair > void change_to( const Pair & p ) { base_::first = p.first ; base_::second = p.second; } void clear_info() {}; }; } // namespace detail template< class TA, class TB, class Info, bool FM > class mutant_relation; /// \brief A std::pair signature compatible class that allows you to control /// the internal structure of the data. /** This class allows you to specify the order in wich the two data types will be in the layout of the class. **/ template< class FirstType, class SecondType, class Info, class Layout = normal_layout > class structured_pair : public ::boost::bimaps::relation::detail::pair_info_hook < FirstType, SecondType, Info, Layout > { typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::relation::detail::pair_info_hook < FirstType, SecondType, Info, Layout > base_; public: typedef ::boost::mpl::vector3< structured_pair< FirstType, SecondType, Info, normal_layout >, structured_pair< FirstType, SecondType, Info, mirror_layout >, BOOST_DEDUCED_TYPENAME ::boost::mpl::if_< BOOST_DEDUCED_TYPENAME ::boost::is_same
::type, mutant_relation< FirstType, SecondType, Info, true >, mutant_relation< SecondType, FirstType, Info, true > >::type > mutant_views; structured_pair() {} structured_pair(BOOST_DEDUCED_TYPENAME boost::call_traits< BOOST_DEDUCED_TYPENAME base_::first_type >::param_type f, BOOST_DEDUCED_TYPENAME boost::call_traits< BOOST_DEDUCED_TYPENAME base_::second_type >::param_type s) : base_(f,s) {} structured_pair(BOOST_DEDUCED_TYPENAME boost::call_traits< BOOST_DEDUCED_TYPENAME base_::first_type >::param_type f, BOOST_DEDUCED_TYPENAME boost::call_traits< BOOST_DEDUCED_TYPENAME base_::second_type >::param_type s, BOOST_DEDUCED_TYPENAME boost::call_traits< BOOST_DEDUCED_TYPENAME base_::info_type >::param_type i) : base_(f,s,i) {} template< class OtherLayout > structured_pair( const structured_pair
& p) : base_(p) {} template< class OtherLayout > structured_pair& operator=( const structured_pair
& p) { base_::change_to(p); return *this; } template< class First, class Second > structured_pair(const std::pair
& p) : base_(p.first,p.second) {} template< class First, class Second > structured_pair& operator=(const std::pair
& p) { base_::first = p.first; base_::second = p.second; base_::clear_info(); return *this; } template< class Tag > const BOOST_DEDUCED_TYPENAME ::boost::bimaps::relation::support:: result_of::get
::type get(BOOST_EXPLICIT_TEMPLATE_TYPE(Tag)) const { return ::boost::bimaps::relation::support::get
(*this); } template< class Tag > BOOST_DEDUCED_TYPENAME ::boost::bimaps::relation::support:: result_of::get
::type get(BOOST_EXPLICIT_TEMPLATE_TYPE(Tag)) { return ::boost::bimaps::relation::support::get
(*this); } }; // structured_pair - structured_pair template< class FirstType, class SecondType, class Info, class Layout1, class Layout2 > bool operator==(const structured_pair
& a, const structured_pair
& b) { return ( ( a.first == b.first ) && ( a.second == b.second ) ); } template< class FirstType, class SecondType, class Info, class Layout1, class Layout2 > bool operator!=(const structured_pair
& a, const structured_pair
& b) { return ! ( a == b ); } template< class FirstType, class SecondType, class Info, class Layout1, class Layout2 > bool operator<(const structured_pair
& a, const structured_pair
& b) { return ( ( a.first < b.first ) || (( a.first == b.first ) && ( a.second < b.second ))); } template< class FirstType, class SecondType, class Info, class Layout1, class Layout2 > bool operator<=(const structured_pair
& a, const structured_pair
& b) { return ( ( a.first < b.first ) || (( a.first == b.first ) && ( a.second <= b.second ))); } template< class FirstType, class SecondType, class Info, class Layout1, class Layout2 > bool operator>(const structured_pair
& a, const structured_pair
& b) { return ( ( a.first > b.first ) || (( a.first == b.first ) && ( a.second > b.second ))); } template< class FirstType, class SecondType, class Info, class Layout1, class Layout2 > bool operator>=(const structured_pair
& a, const structured_pair
& b) { return ( ( a.first > b.first ) || (( a.first == b.first ) && ( a.second >= b.second ))); } // structured_pair - std::pair template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator==(const structured_pair
& a, const std::pair
& b) { return ( ( a.first == b.first ) && ( a.second == b.second ) ); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator!=(const structured_pair
& a, const std::pair
& b) { return ! ( a == b ); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator<(const structured_pair
& a, const std::pair
& b) { return ( ( a.first < b.first ) || (( a.first == b.first ) && ( a.second < b.second ))); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator<=(const structured_pair
& a, const std::pair
& b) { return ( ( a.first < b.first ) || (( a.first == b.first ) && ( a.second <= b.second ))); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator>(const structured_pair
& a, const std::pair
& b) { return ( ( a.first > b.first ) || (( a.first == b.first ) && ( a.second > b.second ))); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator>=(const structured_pair
& a, const std::pair
& b) { return ( ( a.first > b.first ) || (( a.first == b.first ) && ( a.second >= b.second ))); } // std::pair - sturctured_pair template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator==(const std::pair
& a, const structured_pair
& b) { return ( ( a.first == b.first ) && ( a.second == b.second ) ); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator!=(const std::pair
& a, const structured_pair
& b) { return ! ( a == b ); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator<(const std::pair
& a, const structured_pair
& b) { return ( ( a.first < b.first ) || (( a.first == b.first ) && ( a.second < b.second ))); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator<=(const std::pair
& a, const structured_pair
& b) { return ( ( a.first < b.first ) || (( a.first == b.first ) && ( a.second <= b.second ))); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator>(const std::pair
& a, const structured_pair
& b) { return ( ( a.first > b.first ) || (( a.first == b.first ) && ( a.second > b.second ))); } template< class FirstType, class SecondType, class Info, class Layout, class F, class S > bool operator>=(const std::pair
& a, const structured_pair
& b) { return ( ( a.first > b.first ) || (( a.first == b.first ) && ( a.second >= b.second ))); } } // namespace relation } // namespace bimaps } // namespace boost #endif // BOOST_BIMAP_RELATION_STRUCTURED_PAIR_HPP
structured_pair.hpp
网页地址
文件地址
上一页
4/5
下一页
下载
( 16 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.