135 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			135 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /*============================================================================= | ||
|  |     Copyright (c) 2001-2011 Joel de Guzman | ||
|  | 
 | ||
|  |     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) | ||
|  | ==============================================================================*/ | ||
|  | #if !defined(FUSION_MAP_MAIN_07212005_1106) | ||
|  | #define FUSION_MAP_MAIN_07212005_1106 | ||
|  | 
 | ||
|  | #include <boost/fusion/support/config.hpp> | ||
|  | #include <boost/fusion/container/map/map_fwd.hpp> | ||
|  | #include <boost/fusion/support/pair.hpp> | ||
|  | 
 | ||
|  | /////////////////////////////////////////////////////////////////////////////// | ||
|  | // Without variadics, we will use the PP version | ||
|  | /////////////////////////////////////////////////////////////////////////////// | ||
|  | #if !defined(BOOST_FUSION_HAS_VARIADIC_MAP) | ||
|  | # include <boost/fusion/container/map/detail/cpp03/map.hpp> | ||
|  | #else | ||
|  | 
 | ||
|  | /////////////////////////////////////////////////////////////////////////////// | ||
|  | // C++11 interface | ||
|  | /////////////////////////////////////////////////////////////////////////////// | ||
|  | #include <boost/fusion/container/map/detail/map_impl.hpp> | ||
|  | #include <boost/fusion/container/map/detail/begin_impl.hpp> | ||
|  | #include <boost/fusion/container/map/detail/end_impl.hpp> | ||
|  | #include <boost/fusion/container/map/detail/at_impl.hpp> | ||
|  | #include <boost/fusion/container/map/detail/at_key_impl.hpp> | ||
|  | #include <boost/fusion/container/map/detail/value_at_impl.hpp> | ||
|  | #include <boost/fusion/container/map/detail/value_at_key_impl.hpp> | ||
|  | #include <boost/fusion/sequence/intrinsic/begin.hpp> | ||
|  | #include <boost/fusion/sequence/intrinsic/end.hpp> | ||
|  | #include <boost/fusion/sequence/intrinsic/at.hpp> | ||
|  | #include <boost/fusion/sequence/intrinsic/at_c.hpp> | ||
|  | #include <boost/fusion/support/is_sequence.hpp> | ||
|  | #include <boost/fusion/support/sequence_base.hpp> | ||
|  | #include <boost/fusion/support/category_of.hpp> | ||
|  | #include <boost/fusion/support/void.hpp> | ||
|  | #include <boost/fusion/support/detail/enabler.hpp> | ||
|  | 
 | ||
|  | #include <boost/utility/enable_if.hpp> | ||
|  | 
 | ||
|  | namespace boost { namespace fusion | ||
|  | { | ||
|  |     struct map_tag; | ||
|  | 
 | ||
|  |     template <typename ...T> | ||
|  |     struct map : detail::map_impl<0, T...>, sequence_base<map<T...>> | ||
|  |     { | ||
|  |         typedef map_tag fusion_tag; | ||
|  |         typedef detail::map_impl<0, T...> base_type; | ||
|  | 
 | ||
|  |         struct category : random_access_traversal_tag, associative_tag {}; | ||
|  |         typedef mpl::int_<base_type::size> size; | ||
|  |         typedef mpl::false_ is_view; | ||
|  | 
 | ||
|  |         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         map() {} | ||
|  | 
 | ||
|  |         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         map(map const& seq) | ||
|  |           : base_type(seq.base()) | ||
|  |         {} | ||
|  | 
 | ||
|  |         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         map(map&& seq) | ||
|  |           : base_type(std::forward<map>(seq)) | ||
|  |         {} | ||
|  | 
 | ||
|  |         template <typename Sequence> | ||
|  |         BOOST_FUSION_GPU_ENABLED | ||
|  |         map(Sequence const& seq | ||
|  |           , typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler) | ||
|  |           : base_type(begin(seq), detail::map_impl_from_iterator()) | ||
|  |         {} | ||
|  | 
 | ||
|  |         template <typename Sequence> | ||
|  |         BOOST_FUSION_GPU_ENABLED | ||
|  |         map(Sequence& seq | ||
|  |           , typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler) | ||
|  |           : base_type(begin(seq), detail::map_impl_from_iterator()) | ||
|  |         {} | ||
|  | 
 | ||
|  |         template <typename Sequence> | ||
|  |         BOOST_FUSION_GPU_ENABLED | ||
|  |         map(Sequence&& seq | ||
|  |           , typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler) | ||
|  |           : base_type(begin(seq), detail::map_impl_from_iterator()) | ||
|  |         {} | ||
|  | 
 | ||
|  |         template <typename First, typename ...T_> | ||
|  |         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         map(First const& first, T_ const&... rest) | ||
|  |           : base_type(first, rest...) | ||
|  |         {} | ||
|  | 
 | ||
|  |         template <typename First, typename ...T_> | ||
|  |         BOOST_FUSION_GPU_ENABLED | ||
|  |         map(First&& first, T_&&... rest) | ||
|  |           : base_type(BOOST_FUSION_FWD_ELEM(First, first), BOOST_FUSION_FWD_ELEM(T_, rest)...) | ||
|  |         {} | ||
|  | 
 | ||
|  |         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         map& operator=(map const& rhs) | ||
|  |         { | ||
|  |             base_type::operator=(rhs.base()); | ||
|  |             return *this; | ||
|  |         } | ||
|  | 
 | ||
|  |         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         map& operator=(map&& rhs) | ||
|  |         { | ||
|  |             base_type::operator=(std::forward<base_type>(rhs.base())); | ||
|  |             return *this; | ||
|  |         } | ||
|  | 
 | ||
|  |         template <typename Sequence> | ||
|  |         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         typename enable_if<traits::is_sequence<Sequence>, map&>::type | ||
|  |         operator=(Sequence const& seq) | ||
|  |         { | ||
|  |             base().assign(begin(seq), detail::map_impl_from_iterator()); | ||
|  |             return *this; | ||
|  |         } | ||
|  | 
 | ||
|  |         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         base_type& base() BOOST_NOEXCEPT { return *this; } | ||
|  |         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED | ||
|  |         base_type const& base() const BOOST_NOEXCEPT { return *this; } | ||
|  |     }; | ||
|  | }} | ||
|  | 
 | ||
|  | #endif | ||
|  | #endif |