Chris@16: /*============================================================================= Chris@16: Copyright (c) 2001-2011 Joel de Guzman Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ==============================================================================*/ Chris@16: #if !defined(FUSION_MAP_MAIN_07212005_1106) Chris@16: #define FUSION_MAP_MAIN_07212005_1106 Chris@16: Chris@101: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Without variadics, we will use the PP version Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: #if !defined(BOOST_FUSION_HAS_VARIADIC_MAP) Chris@16: # include Chris@16: #else Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // C++11 interface Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { namespace fusion Chris@16: { Chris@16: struct map_tag; Chris@16: Chris@16: template Chris@16: struct map : detail::map_impl<0, T...>, sequence_base> Chris@16: { Chris@16: typedef map_tag fusion_tag; Chris@16: typedef detail::map_impl<0, T...> base_type; Chris@16: Chris@16: struct category : random_access_traversal_tag, associative_tag {}; Chris@16: typedef mpl::int_ size; Chris@16: typedef mpl::false_ is_view; Chris@16: Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map() {} Chris@16: Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map(map const& seq) Chris@16: : base_type(seq.base()) Chris@16: {} Chris@16: Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map(map&& seq) Chris@16: : base_type(std::forward(seq)) Chris@16: {} Chris@16: Chris@16: template Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map(Sequence const& seq Chris@16: , typename enable_if>::type* /*dummy*/ = 0) Chris@16: : base_type(begin(seq), detail::map_impl_from_iterator()) Chris@16: {} Chris@16: Chris@16: template Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map(Sequence& seq Chris@16: , typename enable_if>::type* /*dummy*/ = 0) Chris@16: : base_type(begin(seq), detail::map_impl_from_iterator()) Chris@16: {} Chris@16: Chris@16: template Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map(Sequence&& seq Chris@16: , typename enable_if>::type* /*dummy*/ = 0) Chris@16: : base_type(begin(seq), detail::map_impl_from_iterator()) Chris@16: {} Chris@16: Chris@16: template Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map(First const& first, T_ const&... rest) Chris@16: : base_type(first, rest...) Chris@16: {} Chris@16: Chris@16: template Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map(First&& first, T_&&... rest) Chris@101: : base_type(BOOST_FUSION_FWD_ELEM(First, first), BOOST_FUSION_FWD_ELEM(T_, rest)...) Chris@16: {} Chris@16: Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map& operator=(map const& rhs) Chris@16: { Chris@16: base_type::operator=(rhs.base()); Chris@16: return *this; Chris@16: } Chris@16: Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: map& operator=(map&& rhs) Chris@16: { Chris@16: base_type::operator=(std::forward(rhs.base())); Chris@16: return *this; Chris@16: } Chris@16: Chris@16: template Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: typename enable_if, map&>::type Chris@16: operator=(Sequence const& seq) Chris@16: { Chris@16: base().assign(begin(seq), detail::map_impl_from_iterator()); Chris@16: return *this; Chris@16: } Chris@16: Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@101: base_type& base() BOOST_NOEXCEPT { return *this; } Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@101: base_type const& base() const BOOST_NOEXCEPT { return *this; } Chris@16: }; Chris@16: }} Chris@16: Chris@16: #endif Chris@16: #endif