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
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>
24 #include <boost/bimap/detail/map_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_DEDUCED_TYPENAME base_::const_reference
72 operator[](BOOST_DEDUCED_TYPENAME base_::size_type n) const
74 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
75 this->base().operator[](n)
79 BOOST_DEDUCED_TYPENAME base_::const_reference
80 at(BOOST_DEDUCED_TYPENAME base_::size_type n) const
82 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
87 BOOST_DEDUCED_TYPENAME base_::reference
88 operator[](BOOST_DEDUCED_TYPENAME base_::size_type n)
90 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
91 const_cast<BOOST_DEDUCED_TYPENAME base_::base_type::value_type &>(
92 this->base().operator[](n)
96 BOOST_DEDUCED_TYPENAME base_::reference
97 at(BOOST_DEDUCED_TYPENAME base_::size_type n)
99 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
100 const_cast<BOOST_DEDUCED_TYPENAME base_::base_type::value_type &>(
105 BOOST_BIMAP_VIEW_ASSIGN_IMPLEMENTATION(base_)
107 BOOST_BIMAP_VIEW_FRONT_BACK_IMPLEMENTATION(base_)
111 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position,
115 this->template functor<
116 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
121 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position,
123 BOOST_DEDUCED_TYPENAME base_::iterator i)
126 this->template functor<
127 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
129 this->template functor<
130 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(i)
134 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position,
136 BOOST_DEDUCED_TYPENAME base_::iterator first,
137 BOOST_DEDUCED_TYPENAME base_::iterator last)
140 this->template functor<
141 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
143 this->template functor<
144 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(first),
145 this->template functor<
146 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(last)
150 void remove(BOOST_DEDUCED_TYPENAME ::boost::call_traits<
151 BOOST_DEDUCED_TYPENAME base_::value_type >::param_type value)
154 this->template functor<
155 BOOST_DEDUCED_TYPENAME base_::value_to_base>()(value)
159 template<typename Predicate>
160 void remove_if(Predicate pred)
162 this->base().remove_if(
163 ::boost::bimaps::container_adaptor::detail::unary_check_adaptor
166 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
167 BOOST_DEDUCED_TYPENAME base_::value_from_base
169 >( pred, this->template functor<
170 BOOST_DEDUCED_TYPENAME base_::value_from_base>() )
177 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
179 std::equal_to<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::equal_to<BOOST_DEDUCED_TYPENAME base_::value_type>(),
185 this->template functor<
186 BOOST_DEDUCED_TYPENAME base_::value_from_base>()
191 template< class BinaryPredicate >
192 void unique(BinaryPredicate binary_pred)
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
202 this->template functor<
203 BOOST_DEDUCED_TYPENAME base_::value_from_base>()
208 void merge(vector_set_view & x)
210 this->base().merge(x.base(),
211 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
213 std::less<BOOST_DEDUCED_TYPENAME base_::value_type>,
214 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
215 BOOST_DEDUCED_TYPENAME base_::value_from_base
218 std::less<BOOST_DEDUCED_TYPENAME base_::value_type>(),
219 this->template functor<
220 BOOST_DEDUCED_TYPENAME base_::value_from_base>()
225 template< class Compare >
226 void merge(vector_set_view & x, Compare comp)
228 this->base().merge(x.base(),
229 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
232 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
233 BOOST_DEDUCED_TYPENAME base_::value_from_base
235 >( comp, this->template functor<
236 BOOST_DEDUCED_TYPENAME base_::value_from_base>() )
243 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
245 std::less<BOOST_DEDUCED_TYPENAME base_::value_type>,
246 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
247 BOOST_DEDUCED_TYPENAME base_::value_from_base
250 std::less<BOOST_DEDUCED_TYPENAME base_::value_type>(),
251 this->template functor<
252 BOOST_DEDUCED_TYPENAME base_::value_from_base>()
257 template< class Compare >
258 void sort(Compare comp)
261 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
264 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
265 BOOST_DEDUCED_TYPENAME base_::value_from_base
267 >( comp, this->template functor<
268 BOOST_DEDUCED_TYPENAME base_::value_from_base>() )
274 this->base().reverse();
277 // Rearrange Operations
279 void relocate(BOOST_DEDUCED_TYPENAME base_::iterator position,
280 BOOST_DEDUCED_TYPENAME base_::iterator i)
282 this->base().relocate(
283 this->template functor<
284 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
285 this->template functor<
286 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(i)
290 void relocate(BOOST_DEDUCED_TYPENAME base_::iterator position,
291 BOOST_DEDUCED_TYPENAME base_::iterator first,
292 BOOST_DEDUCED_TYPENAME base_::iterator last)
294 this->base().relocate(
295 this->template functor<
296 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
297 this->template functor<
298 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(first),
299 this->template functor<
300 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(last)
308 } // namespace bimaps
312 #endif // BOOST_BIMAP_VIEWS_VECTOR_SET_VIEW_HPP