fix doc example typo
[boost.git] / boost / bimap / list_of.hpp
blob5865dd61e64df4c8f685ee9892b1756b67f3cb66
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)
9 /// \file list_of.hpp
10 /// \brief Include support for list constrains for the bimap container
12 #ifndef BOOST_BIMAP_LIST_OF_HPP
13 #define BOOST_BIMAP_LIST_OF_HPP
15 #if defined(_MSC_VER) && (_MSC_VER>=1200)
16 #pragma once
17 #endif
19 #include <boost/config.hpp>
21 #include <boost/bimap/detail/user_interface_config.hpp>
23 #include <boost/mpl/bool.hpp>
25 #include <boost/concept_check.hpp>
27 #include <boost/bimap/detail/concept_tags.hpp>
29 #include <boost/bimap/tags/support/value_type_of.hpp>
31 #include <boost/bimap/detail/generate_index_binder.hpp>
32 #include <boost/bimap/detail/generate_view_binder.hpp>
33 #include <boost/bimap/detail/generate_relation_binder.hpp>
35 #include <boost/multi_index/sequenced_index.hpp>
37 #include <boost/bimap/views/list_map_view.hpp>
38 #include <boost/bimap/views/list_set_view.hpp>
40 namespace boost {
41 namespace bimaps {
44 /// \brief Set Type Specification
45 /**
46 This struct is used to specify a set specification.
47 It is not a container, it is just a metaprogramming facility to
48 express the type of a set. Generally, this specification will
49 be used in other place to create a container.
50 It has the same syntax that an std::list instantiation, except
51 that the allocator cannot be specified. The rationale behind
52 this difference is that the allocator is not part of the set
53 type specification, rather it is a container configuration
54 parameter.
56 \code
57 using namespace support;
59 BOOST_STATIC_ASSERT( is_set_type_of< list_of<Type> >::value )
61 BOOST_STATIC_ASSERT
63 is_same
65 list_of<Type>::index_bind
67 KeyExtractor,
68 Tag
70 >::type,
72 sequenced< tag<Tag>, KeyExtractor >
74 >::value
77 typedef bimap
79 list_of<Type>, RightKeyType
81 > bimap_with_left_type_as_list;
83 BOOST_STATIC_ASSERT
85 is_same
87 list_of<Type>::map_view_bind
89 member_at::left,
90 bimap_with_left_type_as_list
92 >::type,
93 list_map_view< member_at::left, bimap_with_left_type_as_list >
95 >::value
98 \endcode
100 See also list_of_relation.
103 template< class Type >
104 struct list_of : public ::boost::bimaps::detail::set_type_of_tag
106 /// User type, can be tagged
107 typedef Type user_type;
109 /// Type of the object that will be stored in the list
110 typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::tags::support::
111 value_type_of<user_type>::type value_type;
114 struct lazy_concept_checked
116 BOOST_CLASS_REQUIRE ( value_type,
117 boost, AssignableConcept );
119 typedef list_of type;
122 BOOST_BIMAP_GENERATE_INDEX_BINDER_0CP_NO_EXTRACTOR(
124 // binds to
125 multi_index::sequenced
128 BOOST_BIMAP_GENERATE_MAP_VIEW_BINDER(
130 // binds to
131 views::list_map_view
134 BOOST_BIMAP_GENERATE_SET_VIEW_BINDER(
136 // binds to
137 views::list_set_view
140 typedef mpl::bool_<true> mutable_key;
144 /// \brief List Of Relation Specification
146 This struct is similar to list_of but it is bind logically to a
147 relation. It is used in the bimap instantiation to specify the
148 desired type of the main view. This struct implements internally
149 a metafunction named bind_to that manages the quite complicated
150 task of finding the right type of the set for the relation.
152 \code
153 template<class Relation>
154 struct bind_to
156 typedef -unspecified- type;
158 \endcode
160 See also list_of, is_set_type_of_relation.
163 struct list_of_relation : public ::boost::bimaps::detail::set_type_of_relation_tag
165 BOOST_BIMAP_GENERATE_RELATION_BINDER_0CP(
167 // binds to
168 list_of
171 typedef mpl::bool_<true> left_mutable_key;
172 typedef mpl::bool_<true> right_mutable_key;
176 } // namespace bimaps
177 } // namespace boost
180 #endif // BOOST_BIMAP_LIST_OF_HPP