| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | // Boost.Assign library////  Copyright Thorsten Ottosen 2006. Use, modification and//  distribution is subject to 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)//// For more information, see http://www.boost.org/libs/assign///#ifndef BOOST_ASSIGN_PTR_CONTAINER_PTR_MAP_INSERTER_HPP#define BOOST_ASSIGN_PTR_CONTAINER_PTR_MAP_INSERTER_HPP#if defined(_MSC_VER)# pragma once#endif#include <boost/assign/list_inserter.hpp>#include <boost/type_traits/remove_reference.hpp>#include <boost/type_traits/remove_pointer.hpp>#include <boost/move/utility.hpp>#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)#include <boost/preprocessor/repetition/enum_binary_params.hpp>#include <boost/preprocessor/repetition/enum_params.hpp>#include <boost/preprocessor/iteration/local.hpp>#endifnamespace boost{namespace assign{    template< class PtrMap, class Obj >     class ptr_map_inserter    {        typedef BOOST_DEDUCED_TYPENAME                remove_pointer< BOOST_DEDUCED_TYPENAME                        remove_reference<Obj>::type >::type           obj_type;        typedef BOOST_DEDUCED_TYPENAME PtrMap::key_type           key_type;            public:                ptr_map_inserter( PtrMap& m ) : m_( m )        {}#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)               template< class Key >        ptr_map_inserter& operator()( const Key& t )        {            key_type k(t);            m_.insert( k, new obj_type );            return *this;        }#ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value#define BOOST_ASSIGN_MAX_PARAMS 6        #endif#define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1)#define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class T)#define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& t)#define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, t)        #define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)#define BOOST_PP_LOCAL_MACRO(n) \    template< class T, BOOST_ASSIGN_PARAMS1(n) > \    ptr_map_inserter& operator()( const T& t, BOOST_ASSIGN_PARAMS2(n) ) \    { \        key_type k(t); \        m_.insert( k, new obj_type( BOOST_ASSIGN_PARAMS3(n) ) ); \        return *this; \    } \    /**/        #include BOOST_PP_LOCAL_ITERATE()#else    template< class Key, class... Ts >    ptr_map_inserter& operator()(Key&& k, Ts&&... ts)    {        key_type key(boost::forward<Key>(k));        m_.insert(key, new obj_type(boost::forward<Ts>(ts)...));        return *this;    }#endif    private:        ptr_map_inserter& operator=( const ptr_map_inserter& );        PtrMap& m_;    };        template< class PtrMap >    inline ptr_map_inserter< PtrMap, typename PtrMap::mapped_reference >    ptr_map_insert( PtrMap& m )    {        return ptr_map_inserter< PtrMap, typename PtrMap::mapped_reference >( m );    }#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING    template< class T, class PtrMap >    inline ptr_map_inserter< PtrMap, T >    ptr_map_insert( PtrMap& m )    {        return ptr_map_inserter< PtrMap, T >( m );    }#endif     } // namespace 'assign'} // namespace 'boost'#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)#undef BOOST_ASSIGN_PARAMS1#undef BOOST_ASSIGN_PARAMS2#undef BOOST_ASSIGN_PARAMS3#undef BOOST_ASSIGN_MAX_PARAMETERS#endif#endif
 |