You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
97 lines
2.3 KiB
97 lines
2.3 KiB
// 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/symmetrical_base.hpp |
|
/// \brief Base class for symmetrical types |
|
|
|
#ifndef BOOST_BIMAP_RELATION_SYMMETRICAL_BASE_HPP |
|
#define BOOST_BIMAP_RELATION_SYMMETRICAL_BASE_HPP |
|
|
|
#if defined(_MSC_VER) && (_MSC_VER>=1200) |
|
#pragma once |
|
#endif |
|
|
|
#include <boost/config.hpp> |
|
|
|
#include <boost/mpl/if.hpp> |
|
#include <boost/type_traits/remove_const.hpp> |
|
|
|
// Boost.Bimap |
|
#include <boost/bimap/tags/tagged.hpp> |
|
#include <boost/bimap/tags/support/default_tagged.hpp> |
|
|
|
#include <boost/bimap/relation/member_at.hpp> |
|
|
|
|
|
namespace boost { |
|
namespace bimaps { |
|
namespace relation { |
|
|
|
/// \brief Base of symetrical tagged types. |
|
/** |
|
|
|
**/ |
|
|
|
template< class TA, class TB, bool force_mutable = false > |
|
class symmetrical_base |
|
{ |
|
|
|
public: |
|
|
|
typedef BOOST_DEDUCED_TYPENAME tags::support::default_tagged |
|
< |
|
TA, |
|
member_at::left |
|
|
|
>::type tagged_left_type; |
|
|
|
typedef BOOST_DEDUCED_TYPENAME tags::support::default_tagged |
|
< |
|
TB, |
|
member_at::right |
|
|
|
>::type tagged_right_type; |
|
|
|
public: |
|
|
|
//@{ |
|
/// The type stored in the relation |
|
|
|
typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c< force_mutable, |
|
|
|
BOOST_DEDUCED_TYPENAME ::boost::remove_const< |
|
BOOST_DEDUCED_TYPENAME tagged_left_type::value_type >::type, |
|
BOOST_DEDUCED_TYPENAME tagged_left_type::value_type |
|
|
|
>::type left_value_type; |
|
|
|
typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c< force_mutable, |
|
|
|
BOOST_DEDUCED_TYPENAME ::boost::remove_const< |
|
BOOST_DEDUCED_TYPENAME tagged_right_type::value_type >::type, |
|
BOOST_DEDUCED_TYPENAME tagged_right_type::value_type |
|
|
|
>::type right_value_type; |
|
//@} |
|
|
|
//@{ |
|
/// The tag of the member. By default it is \c member_at::{side} |
|
typedef BOOST_DEDUCED_TYPENAME tagged_left_type ::tag left_tag; |
|
typedef BOOST_DEDUCED_TYPENAME tagged_right_type::tag right_tag; |
|
//@} |
|
}; |
|
|
|
|
|
|
|
} // namespace relation |
|
} // namespace bimaps |
|
} // namespace boost |
|
|
|
|
|
#endif // BOOST_BIMAP_RELATION_SYMMETRICAL_BASE_HPP |
|
|
|
|