Imported Upstream version 1.57.0
[platform/upstream/boost.git] / boost / bimap / relation / support / is_tag_of_member_at.hpp
1 // Boost.Bimap
2 //
3 // Copyright (c) 2006-2007 Matias Capeletto
4 //
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8
9 /// \file relation/support/is_tag_of_member_at.hpp
10 /// \brief is_tag_of_member_at<tag,relation> metafunction
11
12 #ifndef BOOST_BIMAP_RELATION_SUPPORT_IS_TAG_OF_MEMBER_AT_HPP
13 #define BOOST_BIMAP_RELATION_SUPPORT_IS_TAG_OF_MEMBER_AT_HPP
14
15 #if defined(_MSC_VER) && (_MSC_VER>=1200)
16 #pragma once
17 #endif
18
19 #include <boost/config.hpp>
20
21 #include <boost/bimap/relation/member_at.hpp>
22 #include <boost/type_traits/is_same.hpp>
23
24 #include <boost/mpl/bool.hpp>
25 #include <boost/utility/enable_if.hpp>
26 #include <boost/bimap/relation/support/member_with_tag.hpp>
27
28 /** \struct boost::bimaps::relation::support::is_tag_of_member_at_left
29
30 \brief Metafunction to test if a user tag is refering to the left member.
31
32 \code
33
34 template< class Tag, class Relation >
35 struct is_tag_of_member_at_left : {true_|false_} {};
36
37 \endcode
38
39 This metafunction is somewhat redundant with member_with_tag, but it is included
40 because it is a lot easier to metaprogram with it. The result type is the
41 same that:
42
43 \code
44
45  is_same< member_with_tag<Tag,Relation>::type , member_at::left >::type
46
47 \endcode
48
49 See also member_with_tag, member_at, is_tag_of_member_at_right.
50 \ingroup relation_group
51                                                                              **/
52
53
54 /** \struct boost::bimaps::relation::support::is_tag_of_member_at_right
55
56 \brief Metafunction to test if a user tag is refering to the left member.
57
58 \code
59
60 template< class Tag, class Relation >
61 struct is_tag_of_member_at_right : {true_|false_} {};
62
63 \endcode
64
65 This metafunction is somewhat redundat with member_with_tag, but it is included
66 because it is a lot easier to metaprogram with it. The result type is the
67 same that:
68
69 \code
70
71  is_same< member_with_tag<Tag,Relation>::type , member_at::right >::type
72
73 \endcode
74
75 See also member_with_tag, member_at, is_tag_of_member_at_left.
76 \ingroup relation_group
77                                                                              **/
78
79
80 #ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
81
82 namespace boost {
83 namespace bimaps {
84 namespace relation {
85 namespace support {
86
87 // Metafunction is_tag_of_member_at_left
88 // Easiear metaprogramming
89
90 template
91 <
92     class Tag,
93     class Relation,
94     class Enable = void
95 >
96 struct is_tag_of_member_at_left :
97     ::boost::mpl::false_ {};
98
99 template< class Tag, class Relation >
100 struct is_tag_of_member_at_left
101 <
102     Tag, Relation,
103     BOOST_DEDUCED_TYPENAME enable_if
104     <
105         is_same
106         <
107             BOOST_DEDUCED_TYPENAME member_with_tag<Tag,Relation>::type,
108             member_at::left
109         >
110
111     >::type
112 > :
113     ::boost::mpl::true_ {};
114
115 // Metafunction is_tag_of_member_at_right
116 // Easiear metaprogramming
117
118 template
119 <
120     class Tag,
121     class Relation,
122     class Enable = void
123 >
124 struct is_tag_of_member_at_right :
125     ::boost::mpl::false_ {};
126
127 template< class Tag, class Relation >
128 struct is_tag_of_member_at_right
129 <
130     Tag, Relation,
131     BOOST_DEDUCED_TYPENAME enable_if
132     <
133         is_same
134         <
135             BOOST_DEDUCED_TYPENAME member_with_tag<Tag,Relation>::type,
136             member_at::right
137         >
138
139     >::type
140 > :
141     ::boost::mpl::true_ {};
142
143
144 // Metafunction is_tag_of_member_at_info
145 // Easiear metaprogramming
146
147 template
148 <
149     class Tag,
150     class Relation,
151     class Enable = void
152 >
153 struct is_tag_of_member_at_info :
154     ::boost::mpl::false_ {};
155
156 template< class Tag, class Relation >
157 struct is_tag_of_member_at_info
158 <
159     Tag, Relation,
160     BOOST_DEDUCED_TYPENAME enable_if
161     <
162         is_same
163         <
164             BOOST_DEDUCED_TYPENAME member_with_tag<Tag,Relation>::type,
165             member_at::info
166         >
167
168     >::type
169 > :
170     ::boost::mpl::true_ {};
171
172 } // namespace support
173 } // namespace relation
174 } // namespace bimaps
175 } // namespace boost
176
177 #endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
178
179 #endif // BOOST_BIMAP_RELATION_SUPPORT_IS_TAG_OF_MEMBER_AT_HPP
180
181