You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
136 lines
4.6 KiB
136 lines
4.6 KiB
// Boost.Bimap |
|
// |
|
// Copyright (c) 2006-2007 Matias Capeletto |
|
// |
|
// Distributed under the Boost Software License, Version 1.0. |
|
// (See accompanying file LICENSE_1_0.txt or copy at |
|
// http://www.boost.org/LICENSE_1_0.txt) |
|
|
|
/// \file views/unordered_multimap_view.hpp |
|
/// \brief View of a side of a bimap that is signature compatible with tr1::unordered_multimap. |
|
|
|
#ifndef BOOST_BIMAP_VIEWS_UNOREDERED_MULTIMAP_VIEW_HPP |
|
#define BOOST_BIMAP_VIEWS_UNOREDERED_MULTIMAP_VIEW_HPP |
|
|
|
#if defined(_MSC_VER) && (_MSC_VER>=1200) |
|
#pragma once |
|
#endif |
|
|
|
#include <boost/config.hpp> |
|
|
|
#include <utility> |
|
|
|
#include <boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp> |
|
#include <boost/bimap/detail/non_unique_views_helper.hpp> |
|
#include <boost/bimap/support/iterator_type_by.hpp> |
|
#include <boost/bimap/detail/map_view_base.hpp> |
|
|
|
namespace boost { |
|
namespace bimaps { |
|
namespace views { |
|
|
|
/// \brief View of a side of a bimap that is signature compatible with tr1::unordered_multimap. |
|
/** |
|
|
|
This class uses container_adaptor and iterator_adaptor to wrapped a index of the |
|
multi_index bimap core so it can be used as a tr1::unordered_multimap. |
|
|
|
See also const_unordered_multimap_view. |
|
**/ |
|
|
|
template< class Tag, class BimapType > |
|
class unordered_multimap_view |
|
: |
|
public BOOST_BIMAP_MAP_VIEW_CONTAINER_ADAPTOR( |
|
unordered_multimap_adaptor, |
|
Tag,BimapType, |
|
local_iterator_type_by,const_local_iterator_type_by |
|
), |
|
|
|
public ::boost::bimaps::detail::map_view_base< |
|
unordered_multimap_view<Tag,BimapType>,Tag,BimapType > |
|
|
|
{ |
|
typedef BOOST_BIMAP_MAP_VIEW_CONTAINER_ADAPTOR( |
|
unordered_multimap_adaptor, |
|
Tag,BimapType, |
|
local_iterator_type_by,const_local_iterator_type_by |
|
|
|
) base_; |
|
|
|
BOOST_BIMAP_MAP_VIEW_BASE_FRIEND(unordered_multimap_view,Tag,BimapType) |
|
|
|
public: |
|
|
|
typedef std::pair< |
|
BOOST_DEDUCED_TYPENAME base_::iterator, |
|
BOOST_DEDUCED_TYPENAME base_::iterator |
|
> range_type; |
|
|
|
typedef std::pair< |
|
BOOST_DEDUCED_TYPENAME base_::const_iterator, |
|
BOOST_DEDUCED_TYPENAME base_::const_iterator |
|
> const_range_type; |
|
|
|
typedef BOOST_DEDUCED_TYPENAME base_::value_type::info_type info_type; |
|
|
|
unordered_multimap_view(BOOST_DEDUCED_TYPENAME base_::base_type & c) |
|
: base_(c) {} |
|
|
|
BOOST_BIMAP_NON_UNIQUE_VIEW_INSERT_FUNCTIONS |
|
|
|
unordered_multimap_view & operator=(const unordered_multimap_view & v) |
|
{ |
|
this->base() = v.base(); |
|
return *this; |
|
} |
|
}; |
|
|
|
|
|
} // namespace views |
|
|
|
/*===========================================================================*/ |
|
#define BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,TYPENAME) \ |
|
typedef BOOST_DEDUCED_TYPENAME MAP_VIEW::TYPENAME \ |
|
BOOST_PP_CAT(SIDE,BOOST_PP_CAT(_,TYPENAME)); |
|
/*===========================================================================*/ |
|
|
|
/*===========================================================================*/ |
|
#define BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEFS_BODY(MAP_VIEW,SIDE) \ |
|
BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,local_iterator) \ |
|
BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,const_local_iterator) \ |
|
BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,range_type) \ |
|
BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,const_range_type) \ |
|
BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,hasher) \ |
|
BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF(MAP_VIEW,SIDE,key_equal) |
|
/*===========================================================================*/ |
|
|
|
namespace detail { |
|
|
|
template< class Tag, class BimapType > |
|
struct left_map_view_extra_typedefs< ::boost::bimaps::views::unordered_multimap_view<Tag,BimapType> > |
|
{ |
|
private: typedef ::boost::bimaps::views::unordered_multimap_view<Tag,BimapType> map_view_; |
|
public : BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEFS_BODY(map_view_,left) |
|
}; |
|
|
|
template< class Tag, class BimapType > |
|
struct right_map_view_extra_typedefs< ::boost::bimaps::views::unordered_multimap_view<Tag,BimapType> > |
|
{ |
|
private: typedef ::boost::bimaps::views::unordered_multimap_view<Tag,BimapType> map_view_; |
|
public : BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEFS_BODY(map_view_,right) |
|
}; |
|
|
|
} // namespace detail |
|
|
|
/*===========================================================================*/ |
|
#undef BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEF |
|
#undef BOOST_BIMAP_MAP_VIEW_EXTRA_TYPEDEFS_BODY |
|
/*===========================================================================*/ |
|
|
|
} // namespace bimaps |
|
} // namespace boost |
|
|
|
#endif // BOOST_BIMAP_VIEWS_UNOREDERED_MULTIMAP_VIEW_HPP |
|
|
|
|
|
|