1 2 #ifndef BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED 3 #define BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED 4 5 // Copyright Aleksey Gurtovoy 2003-2004 6 // Copyright David Abrahams 2003-2004 7 // 8 // Distributed under the Boost Software License, Version 1.0. 9 // (See accompanying file LICENSE_1_0.txt or copy at 10 // http://www.boost.org/LICENSE_1_0.txt) 11 // 12 // See http://www.boost.org/libs/mpl for documentation. 13 14 // $Id: insert_impl.hpp 55751 2009-08-24 04:11:00Z agurtovoy $ 15 // $Date: 2009-08-24 00:11:00 -0400 (Mon, 24 Aug 2009) $ 16 // $Revision: 55751 $ 17 18 #include <boost/mpl/insert_fwd.hpp> 19 #include <boost/mpl/next_prior.hpp> 20 #include <boost/mpl/map/aux_/contains_impl.hpp> 21 #include <boost/mpl/map/aux_/item.hpp> 22 #include <boost/mpl/map/aux_/tag.hpp> 23 #include <boost/mpl/aux_/na.hpp> 24 #include <boost/mpl/aux_/config/typeof.hpp> 25 26 namespace boost { namespace mpl { 27 28 namespace aux { 29 template< typename Map, typename Pair > 30 struct map_insert_impl 31 : if_< 32 contains_impl<aux::map_tag>::apply<Map,Pair> 33 , Map 34 #if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) 35 , m_item< 36 typename Pair::first 37 , typename Pair::second 38 , Map 39 > 40 #else 41 , m_item< 42 Map::order::value 43 , typename Pair::first 44 , typename Pair::second 45 , Map 46 > 47 #endif 48 > 49 { 50 }; 51 } 52 53 template<> 54 struct insert_impl< aux::map_tag > 55 { 56 template< 57 typename Map 58 , typename PosOrKey 59 , typename KeyOrNA 60 > 61 struct apply 62 : aux::map_insert_impl< 63 Map 64 , typename if_na<KeyOrNA,PosOrKey>::type 65 > 66 { 67 }; 68 }; 69 70 }} 71 72 #endif // BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED 73