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) 8 9 /// \file container_adaptor/multimap_adaptor.hpp 10 /// \brief Container adaptor to easily build a std::multimap signature compatible container. 11 12 #ifndef BOOST_BIMAP_CONTAINER_ADAPTOR_MULTIMAP_ADAPTOR_HPP 13 #define BOOST_BIMAP_CONTAINER_ADAPTOR_MULTIMAP_ADAPTOR_HPP 14 15 #if defined(_MSC_VER) 16 #pragma once 17 #endif 18 19 #include <boost/config.hpp> 20 21 #include <boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp> 22 #include <boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp> 23 #include <boost/mpl/aux_/na.hpp> 24 #include <boost/mpl/vector.hpp> 25 26 namespace boost { 27 namespace bimaps { 28 namespace container_adaptor { 29 30 /// \brief Container adaptor to easily build a std::multimap signature compatible container. 31 32 template 33 < 34 class Base, 35 36 class Iterator, 37 class ConstIterator, 38 class ReverseIterator, 39 class ConstReverseIterator, 40 41 class IteratorToBaseConverter = ::boost::mpl::na, 42 class IteratorFromBaseConverter = ::boost::mpl::na, 43 class ReverseIteratorFromBaseConverter = ::boost::mpl::na, 44 class ValueToBaseConverter = ::boost::mpl::na, 45 class ValueFromBaseConverter = ::boost::mpl::na, 46 class KeyToBaseConverter = ::boost::mpl::na, 47 48 class FunctorsFromDerivedClasses = mpl::vector<> 49 > 50 class multimap_adaptor : 51 52 public ::boost::bimaps::container_adaptor:: 53 ordered_associative_container_adaptor 54 < 55 Base, 56 Iterator, ConstIterator, ReverseIterator, ConstReverseIterator, 57 BOOST_DEDUCED_TYPENAME Iterator::value_type::first_type, 58 IteratorToBaseConverter, IteratorFromBaseConverter, 59 ReverseIteratorFromBaseConverter, 60 ValueToBaseConverter, ValueFromBaseConverter, 61 KeyToBaseConverter, 62 FunctorsFromDerivedClasses 63 > 64 { 65 typedef ::boost::bimaps::container_adaptor:: 66 ordered_associative_container_adaptor 67 < 68 Base, 69 Iterator, ConstIterator, ReverseIterator, ConstReverseIterator, 70 BOOST_DEDUCED_TYPENAME Iterator::value_type::first_type, 71 IteratorToBaseConverter, IteratorFromBaseConverter, 72 ReverseIteratorFromBaseConverter, 73 ValueToBaseConverter, ValueFromBaseConverter, 74 KeyToBaseConverter, 75 FunctorsFromDerivedClasses 76 77 > base_; 78 79 // MetaData ------------------------------------------------------------- 80 81 public: 82 83 typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::second_type data_type; 84 typedef data_type mapped_type; 85 86 // Access ----------------------------------------------------------------- 87 88 public: 89 multimap_adaptor(Base & c)90 explicit multimap_adaptor(Base & c) : 91 base_(c) {} 92 93 protected: 94 95 typedef multimap_adaptor multimap_adaptor_; 96 97 public: 98 99 BOOST_BIMAP_NON_UNIQUE_CONTAINER_ADAPTOR_INSERT_FUNCTIONS 100 }; 101 102 103 } // namespace container_adaptor 104 } // namespace bimaps 105 } // namespace boost 106 107 108 #endif // BOOST_BIMAP_CONTAINER_ADAPTOR_MULTIMAP_ADAPTOR_HPP 109 110 111