3 // Copyright (c) 2006-2007 Matias Capeletto
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 views/vector_set_view.hpp
10 /// \brief View of a side of a bimap that is signature compatible with std::vector.
12 #ifndef BOOST_BIMAP_VIEWS_VECTOR_SET_VIEW_HPP
13 #define BOOST_BIMAP_VIEWS_VECTOR_SET_VIEW_HPP
15 #if defined(_MSC_VER) && (_MSC_VER>=1200)
19 #include <boost/config.hpp>
21 #include <boost/bimap/container_adaptor/vector_adaptor.hpp>
22 #include <boost/bimap/container_adaptor/detail/comparison_adaptor.hpp>
23 #include <boost/bimap/detail/set_view_base.hpp>
30 /// \brief View of a bimap that is signature compatible with std::vector.
33 This class uses container_adaptor and iterator_adaptor to wrapped a index of the
34 multi_index bimap core so it can be used as a std::vector.
36 See also const_set_view.
39 template< class CoreIndex >
42 public BOOST_BIMAP_SEQUENCED_SET_VIEW_CONTAINER_ADAPTOR(
45 reverse_iterator, const_reverse_iterator
48 public ::boost::bimaps::detail::
49 set_view_base< vector_set_view< CoreIndex >, CoreIndex >
51 BOOST_BIMAP_SET_VIEW_BASE_FRIEND(vector_set_view,CoreIndex)
53 typedef BOOST_BIMAP_SEQUENCED_SET_VIEW_CONTAINER_ADAPTOR(
56 reverse_iterator, const_reverse_iterator
62 vector_set_view(BOOST_DEDUCED_TYPENAME base_::base_type & c) :
65 vector_set_view & operator=(const vector_set_view & v)
67 this->base() = v.base();
71 BOOST_BIMAP_VIEW_ASSIGN_IMPLEMENTATION(base_)
73 BOOST_BIMAP_VIEW_FRONT_BACK_IMPLEMENTATION(base_)
77 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position,
81 this->template functor<
82 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
87 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position,
89 BOOST_DEDUCED_TYPENAME base_::iterator i)
92 this->template functor<
93 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
95 this->template functor<
96 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(i)
100 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position,
102 BOOST_DEDUCED_TYPENAME base_::iterator first,
103 BOOST_DEDUCED_TYPENAME base_::iterator last)
106 this->template functor<
107 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
109 this->template functor<
110 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(first),
111 this->template functor<
112 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(last)
116 void remove(BOOST_DEDUCED_TYPENAME ::boost::call_traits<
117 BOOST_DEDUCED_TYPENAME base_::value_type >::param_type value)
120 this->template functor<
121 BOOST_DEDUCED_TYPENAME base_::value_to_base>()(value)
125 template<typename Predicate>
126 void remove_if(Predicate pred)
128 this->base().remove_if(
129 ::boost::bimaps::container_adaptor::detail::unary_check_adaptor
132 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
133 BOOST_DEDUCED_TYPENAME base_::value_from_base
135 >( pred, this->template functor<
136 BOOST_DEDUCED_TYPENAME base_::value_from_base>() )
143 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
145 std::equal_to<BOOST_DEDUCED_TYPENAME base_::value_type>,
146 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
147 BOOST_DEDUCED_TYPENAME base_::value_from_base
150 std::equal_to<BOOST_DEDUCED_TYPENAME base_::value_type>(),
151 this->template functor<
152 BOOST_DEDUCED_TYPENAME base_::value_from_base>()
157 template< class BinaryPredicate >
158 void unique(BinaryPredicate binary_pred)
161 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
164 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
165 BOOST_DEDUCED_TYPENAME base_::value_from_base
168 this->template functor<
169 BOOST_DEDUCED_TYPENAME base_::value_from_base>()
174 void merge(vector_set_view & x)
176 this->base().merge(x.base(),
177 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
179 std::less<BOOST_DEDUCED_TYPENAME base_::value_type>,
180 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
181 BOOST_DEDUCED_TYPENAME base_::value_from_base
184 std::less<BOOST_DEDUCED_TYPENAME base_::value_type>(),
185 this->template functor<
186 BOOST_DEDUCED_TYPENAME base_::value_from_base>()
191 template< class Compare >
192 void merge(vector_set_view & x, Compare comp)
194 this->base().merge(x.base(),
195 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
198 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
199 BOOST_DEDUCED_TYPENAME base_::value_from_base
201 >( comp, this->template functor<
202 BOOST_DEDUCED_TYPENAME base_::value_from_base>() )
209 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
211 std::less<BOOST_DEDUCED_TYPENAME base_::value_type>,
212 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
213 BOOST_DEDUCED_TYPENAME base_::value_from_base
216 std::less<BOOST_DEDUCED_TYPENAME base_::value_type>(),
217 this->template functor<
218 BOOST_DEDUCED_TYPENAME base_::value_from_base>()
223 template< class Compare >
224 void sort(Compare comp)
227 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
230 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
231 BOOST_DEDUCED_TYPENAME base_::value_from_base
233 >( comp, this->template functor<
234 BOOST_DEDUCED_TYPENAME base_::value_from_base>() )
240 this->base().reverse();
243 // Rearrange Operations
245 void relocate(BOOST_DEDUCED_TYPENAME base_::iterator position,
246 BOOST_DEDUCED_TYPENAME base_::iterator i)
248 this->base().relocate(
249 this->template functor<
250 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
251 this->template functor<
252 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(i)
256 void relocate(BOOST_DEDUCED_TYPENAME base_::iterator position,
257 BOOST_DEDUCED_TYPENAME base_::iterator first,
258 BOOST_DEDUCED_TYPENAME base_::iterator last)
260 this->base().relocate(
261 this->template functor<
262 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
263 this->template functor<
264 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(first),
265 this->template functor<
266 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(last)
274 } // namespace bimaps
278 #endif // BOOST_BIMAP_VIEWS_VECTOR_SET_VIEW_HPP