annotate DEPENDENCIES/generic/include/boost/bimap/views/vector_map_view.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // Boost.Bimap
Chris@16 2 //
Chris@16 3 // Copyright (c) 2006-2007 Matias Capeletto
Chris@16 4 //
Chris@16 5 // Distributed under the Boost Software License, Version 1.0.
Chris@16 6 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 7 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8
Chris@16 9 /// \file views/vector_map_view.hpp
Chris@16 10 /// \brief View of a side of a bimap.
Chris@16 11
Chris@16 12 #ifndef BOOST_BIMAP_VIEWS_VECTOR_MAP_VIEW_HPP
Chris@16 13 #define BOOST_BIMAP_VIEWS_VECTOR_MAP_VIEW_HPP
Chris@16 14
Chris@101 15 #if defined(_MSC_VER)
Chris@16 16 #pragma once
Chris@16 17 #endif
Chris@16 18
Chris@16 19 #include <boost/config.hpp>
Chris@16 20
Chris@16 21 #include <boost/bimap/container_adaptor/vector_map_adaptor.hpp>
Chris@16 22 #include <boost/bimap/support/iterator_type_by.hpp>
Chris@16 23 #include <boost/bimap/detail/map_view_base.hpp>
Chris@16 24 #include <boost/bimap/container_adaptor/detail/comparison_adaptor.hpp>
Chris@16 25
Chris@16 26 namespace boost {
Chris@16 27 namespace bimaps {
Chris@16 28 namespace views {
Chris@16 29
Chris@16 30 /// \brief View of a side of a bimap.
Chris@16 31 /**
Chris@16 32
Chris@16 33 This class uses container_adaptor and iterator_adaptor to wrapped a index of the
Chris@16 34 multi_index bimap core.
Chris@16 35
Chris@16 36 See also const_map_view.
Chris@16 37 **/
Chris@16 38 template< class Tag, class BimapType >
Chris@16 39 class vector_map_view
Chris@16 40 :
Chris@16 41 public BOOST_BIMAP_MAP_VIEW_CONTAINER_ADAPTOR(
Chris@16 42 vector_map_adaptor,
Chris@16 43 Tag,BimapType,
Chris@16 44 reverse_map_view_iterator, const_reverse_map_view_iterator
Chris@16 45 ),
Chris@16 46
Chris@16 47 public ::boost::bimaps::detail::
Chris@16 48 map_view_base< vector_map_view<Tag,BimapType>,Tag,BimapType >
Chris@16 49 {
Chris@16 50 typedef BOOST_BIMAP_MAP_VIEW_CONTAINER_ADAPTOR(
Chris@16 51 vector_map_adaptor,
Chris@16 52 Tag,BimapType,
Chris@16 53 reverse_map_view_iterator, const_reverse_map_view_iterator
Chris@16 54
Chris@16 55 ) base_;
Chris@16 56
Chris@16 57 BOOST_BIMAP_MAP_VIEW_BASE_FRIEND(vector_map_view,Tag,BimapType)
Chris@16 58
Chris@16 59 typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::relation::support::data_extractor
Chris@16 60 <
Chris@16 61 Tag,
Chris@16 62 BOOST_DEDUCED_TYPENAME BimapType::relation
Chris@16 63
Chris@16 64 >::type key_from_base_value;
Chris@16 65
Chris@16 66 public:
Chris@16 67
Chris@16 68 typedef BOOST_DEDUCED_TYPENAME base_::value_type::info_type info_type;
Chris@16 69
Chris@16 70 vector_map_view(BOOST_DEDUCED_TYPENAME base_::base_type & c) :
Chris@16 71 base_(c) {}
Chris@16 72
Chris@16 73 vector_map_view & operator=(const vector_map_view & v)
Chris@16 74 {
Chris@16 75 this->base() = v.base();
Chris@16 76 return *this;
Chris@16 77 }
Chris@16 78
Chris@16 79 BOOST_DEDUCED_TYPENAME base_::const_reference
Chris@16 80 operator[](BOOST_DEDUCED_TYPENAME base_::size_type n) const
Chris@16 81 {
Chris@16 82 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
Chris@16 83 this->base().operator[](n)
Chris@16 84 );
Chris@16 85 }
Chris@16 86
Chris@16 87 BOOST_DEDUCED_TYPENAME base_::const_reference
Chris@16 88 at(BOOST_DEDUCED_TYPENAME base_::size_type n) const
Chris@16 89 {
Chris@16 90 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
Chris@16 91 this->base().at(n)
Chris@16 92 );
Chris@16 93 }
Chris@16 94
Chris@16 95 BOOST_DEDUCED_TYPENAME base_::reference
Chris@16 96 operator[](BOOST_DEDUCED_TYPENAME base_::size_type n)
Chris@16 97 {
Chris@16 98 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
Chris@16 99 const_cast<BOOST_DEDUCED_TYPENAME base_::base_type::value_type &>(
Chris@16 100 this->base().operator[](n)
Chris@16 101 ));
Chris@16 102 }
Chris@16 103
Chris@16 104 BOOST_DEDUCED_TYPENAME base_::reference
Chris@16 105 at(BOOST_DEDUCED_TYPENAME base_::size_type n)
Chris@16 106 {
Chris@16 107 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
Chris@16 108 const_cast<BOOST_DEDUCED_TYPENAME base_::base_type::value_type &>(
Chris@16 109 this->base().at(n)
Chris@16 110 ));
Chris@16 111 }
Chris@16 112
Chris@16 113 BOOST_BIMAP_VIEW_ASSIGN_IMPLEMENTATION(base_)
Chris@16 114
Chris@16 115 BOOST_BIMAP_VIEW_FRONT_BACK_IMPLEMENTATION(base_)
Chris@16 116
Chris@16 117 // Lists operations
Chris@16 118
Chris@16 119 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position, vector_map_view & x)
Chris@16 120 {
Chris@16 121 this->base().splice(
Chris@16 122 this->template functor<
Chris@16 123 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
Chris@16 124 x.base()
Chris@16 125 );
Chris@16 126 }
Chris@16 127
Chris@16 128 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position,
Chris@16 129 vector_map_view & x,
Chris@16 130 BOOST_DEDUCED_TYPENAME base_::iterator i)
Chris@16 131 {
Chris@16 132 this->base().splice(
Chris@16 133 this->template functor<
Chris@16 134 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
Chris@16 135 x.base(),
Chris@16 136 this->template functor<
Chris@16 137 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(i)
Chris@16 138 );
Chris@16 139 }
Chris@16 140
Chris@16 141 void splice(BOOST_DEDUCED_TYPENAME base_::iterator position,
Chris@16 142 vector_map_view & x,
Chris@16 143 BOOST_DEDUCED_TYPENAME base_::iterator first,
Chris@16 144 BOOST_DEDUCED_TYPENAME base_::iterator last)
Chris@16 145 {
Chris@16 146 this->base().splice(
Chris@16 147 this->template functor<
Chris@16 148 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
Chris@16 149 x.base(),
Chris@16 150 this->template functor<
Chris@16 151 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(first),
Chris@16 152 this->template functor<
Chris@16 153 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(last)
Chris@16 154 );
Chris@16 155 }
Chris@16 156
Chris@16 157 void remove(BOOST_DEDUCED_TYPENAME ::boost::call_traits<
Chris@16 158 BOOST_DEDUCED_TYPENAME base_::value_type >::param_type value)
Chris@16 159 {
Chris@16 160 this->base().remove(
Chris@16 161 this->template functor<
Chris@16 162 BOOST_DEDUCED_TYPENAME base_::value_to_base>()(value)
Chris@16 163 );
Chris@16 164 }
Chris@16 165
Chris@16 166 template< class Predicate >
Chris@16 167 void remove_if(Predicate pred)
Chris@16 168 {
Chris@16 169 this->base().remove_if(
Chris@16 170 ::boost::bimaps::container_adaptor::detail::unary_check_adaptor
Chris@16 171 <
Chris@16 172 Predicate,
Chris@16 173 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
Chris@16 174 key_from_base_value
Chris@16 175
Chris@16 176 >( pred, key_from_base_value() )
Chris@16 177 );
Chris@16 178 }
Chris@16 179
Chris@16 180 void unique()
Chris@16 181 {
Chris@16 182 this->base().unique(
Chris@16 183 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
Chris@16 184 <
Chris@16 185 std::equal_to<BOOST_DEDUCED_TYPENAME base_::key_type>,
Chris@16 186 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
Chris@16 187 key_from_base_value
Chris@16 188
Chris@16 189 >(std::equal_to<BOOST_DEDUCED_TYPENAME base_::key_type>(),
Chris@16 190 key_from_base_value() )
Chris@16 191 );
Chris@16 192 }
Chris@16 193
Chris@16 194 template< class BinaryPredicate >
Chris@16 195 void unique(BinaryPredicate binary_pred)
Chris@16 196 {
Chris@16 197 this->base().unique(
Chris@16 198 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
Chris@16 199 <
Chris@16 200 BinaryPredicate,
Chris@16 201 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
Chris@16 202 key_from_base_value
Chris@16 203
Chris@16 204 >( binary_pred, key_from_base_value() )
Chris@16 205 );
Chris@16 206 }
Chris@16 207
Chris@16 208 void merge(vector_map_view & x)
Chris@16 209 {
Chris@16 210 this->base().merge(x.base(),
Chris@16 211 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
Chris@16 212 <
Chris@16 213 std::less<BOOST_DEDUCED_TYPENAME base_::key_type>,
Chris@16 214 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
Chris@16 215 key_from_base_value
Chris@16 216
Chris@16 217 >( std::less<BOOST_DEDUCED_TYPENAME base_::key_type>(),
Chris@16 218 key_from_base_value() )
Chris@16 219 );
Chris@16 220 }
Chris@16 221
Chris@16 222 template< class Compare >
Chris@16 223 void merge(vector_map_view & x, Compare comp)
Chris@16 224 {
Chris@16 225 this->base().merge(x.base(),
Chris@16 226 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
Chris@16 227 <
Chris@16 228 Compare,
Chris@16 229 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
Chris@16 230 key_from_base_value
Chris@16 231
Chris@16 232 >( comp, key_from_base_value() )
Chris@16 233 );
Chris@16 234 }
Chris@16 235
Chris@16 236 void sort()
Chris@16 237 {
Chris@16 238 this->base().sort(
Chris@16 239 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
Chris@16 240 <
Chris@16 241 std::less<BOOST_DEDUCED_TYPENAME base_::key_type>,
Chris@16 242 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
Chris@16 243 key_from_base_value
Chris@16 244
Chris@16 245 >( std::less<BOOST_DEDUCED_TYPENAME base_::key_type>(),
Chris@16 246 key_from_base_value() )
Chris@16 247 );
Chris@16 248 }
Chris@16 249
Chris@16 250 template< class Compare >
Chris@16 251 void sort(Compare comp)
Chris@16 252 {
Chris@16 253 this->base().sort(
Chris@16 254 ::boost::bimaps::container_adaptor::detail::comparison_adaptor
Chris@16 255 <
Chris@16 256 Compare,
Chris@16 257 BOOST_DEDUCED_TYPENAME base_::base_type::value_type,
Chris@16 258 key_from_base_value
Chris@16 259
Chris@16 260 >( comp, key_from_base_value() )
Chris@16 261 );
Chris@16 262 }
Chris@16 263
Chris@16 264 void reverse()
Chris@16 265 {
Chris@16 266 this->base().reverse();
Chris@16 267 }
Chris@16 268
Chris@16 269 // Rearrange Operations
Chris@16 270
Chris@16 271 void relocate(BOOST_DEDUCED_TYPENAME base_::iterator position,
Chris@16 272 BOOST_DEDUCED_TYPENAME base_::iterator i)
Chris@16 273 {
Chris@16 274 this->base().relocate(
Chris@16 275 this->template functor<
Chris@16 276 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
Chris@16 277 this->template functor<
Chris@16 278 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(i)
Chris@16 279 );
Chris@16 280 }
Chris@16 281
Chris@16 282 void relocate(BOOST_DEDUCED_TYPENAME base_::iterator position,
Chris@16 283 BOOST_DEDUCED_TYPENAME base_::iterator first,
Chris@16 284 BOOST_DEDUCED_TYPENAME base_::iterator last)
Chris@16 285 {
Chris@16 286 this->base().relocate(
Chris@16 287 this->template functor<
Chris@16 288 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(position),
Chris@16 289 this->template functor<
Chris@16 290 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(first),
Chris@16 291 this->template functor<
Chris@16 292 BOOST_DEDUCED_TYPENAME base_::iterator_to_base>()(last)
Chris@16 293 );
Chris@16 294 }
Chris@16 295
Chris@16 296 };
Chris@16 297
Chris@16 298
Chris@16 299 } // namespace views
Chris@16 300
Chris@16 301 /*===========================================================================*/
Chris@16 302 #define BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,TYPENAME) \
Chris@16 303 typedef BOOST_DEDUCED_TYPENAME MAP_VIEW::TYPENAME \
Chris@16 304 BOOST_PP_CAT(SIDE,BOOST_PP_CAT(_,TYPENAME));
Chris@16 305 /*===========================================================================*/
Chris@16 306
Chris@16 307 /*===========================================================================*/
Chris@16 308 #define BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEFS_BODY(MAP_VIEW,SIDE) \
Chris@16 309 BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,reverse_iterator) \
Chris@16 310 BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,const_reverse_iterator)
Chris@16 311 /*===========================================================================*/
Chris@16 312
Chris@16 313 namespace detail {
Chris@16 314
Chris@16 315 template< class Tag, class BimapType >
Chris@16 316 struct left_map_view_extra_typedefs< ::boost::bimaps::views::vector_map_view<Tag,BimapType> >
Chris@16 317 {
Chris@16 318 private: typedef ::boost::bimaps::views::vector_map_view<Tag,BimapType> map_view_;
Chris@16 319 public : BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEFS_BODY(map_view_,left)
Chris@16 320 };
Chris@16 321
Chris@16 322 template< class Tag, class BimapType >
Chris@16 323 struct right_map_view_extra_typedefs< ::boost::bimaps::views::vector_map_view<Tag,BimapType> >
Chris@16 324 {
Chris@16 325 private: typedef ::boost::bimaps::views::vector_map_view<Tag,BimapType> map_view_;
Chris@16 326 public : BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEFS_BODY(map_view_,right)
Chris@16 327 };
Chris@16 328
Chris@16 329 } // namespace detail
Chris@16 330
Chris@16 331 /*===========================================================================*/
Chris@16 332 #undef BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF
Chris@16 333 #undef BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEFS_BODY
Chris@16 334 /*===========================================================================*/
Chris@16 335
Chris@16 336 } // namespace bimaps
Chris@16 337 } // namespace boost
Chris@16 338
Chris@16 339 #endif // BOOST_BIMAP_VIEWS_VECTOR_MAP_VIEW_HPP
Chris@16 340