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)
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 referring 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 referring 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 
182