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_VECTOR_07072005_1244) Chris@16: #define FUSION_VECTOR_07072005_1244 Chris@16: Chris@101: #include Chris@101: #include Chris@101: #include Chris@101: #include Chris@101: #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@101: #include Chris@16: Chris@101: #define FUSION_HASH # Chris@16: Chris@16: #if BOOST_WORKAROUND(BOOST_MSVC, <= 1600) Chris@16: Chris@16: #define BOOST_FUSION_VECTOR_COPY_INIT() \ Chris@16: ctor_helper(rhs, is_base_of()) \ Chris@16: Chris@16: #define BOOST_FUSION_VECTOR_CTOR_HELPER() \ Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \ Chris@16: static vector_n const& \ Chris@16: ctor_helper(vector const& rhs, mpl::true_) \ Chris@16: { \ Chris@16: return rhs.vec; \ Chris@16: } \ Chris@16: \ Chris@16: template \ Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \ Chris@16: static T const& \ Chris@16: ctor_helper(T const& rhs, mpl::false_) \ Chris@16: { \ Chris@16: return rhs; \ Chris@16: } Chris@16: Chris@16: #else Chris@16: Chris@16: #define BOOST_FUSION_VECTOR_COPY_INIT() \ Chris@16: rhs \ Chris@16: Chris@16: #define BOOST_FUSION_VECTOR_CTOR_HELPER() Chris@16: Chris@16: #endif Chris@16: Chris@16: #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) Chris@16: #include Chris@16: #else Chris@16: #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) Chris@16: #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vvector" FUSION_MAX_VECTOR_SIZE_STR ".hpp") Chris@16: #endif Chris@16: 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: This is an auto-generated file. Do not edit! Chris@16: ==============================================================================*/ Chris@16: Chris@16: #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) Chris@16: #pragma wave option(preserve: 1) Chris@16: #endif Chris@16: Chris@16: namespace boost { namespace fusion Chris@16: { Chris@16: struct void_; Chris@16: struct fusion_sequence_tag; Chris@16: Chris@16: template Chris@16: struct vector Chris@16: : sequence_base > Chris@16: { Chris@16: private: Chris@16: Chris@16: typedef typename detail::vector_n_chooser< Chris@16: BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>::type Chris@16: vector_n; Chris@16: Chris@16: template Chris@16: friend struct vector; Chris@16: Chris@16: public: Chris@16: Chris@16: typedef typename vector_n::types types; Chris@16: typedef typename vector_n::fusion_tag fusion_tag; Chris@16: typedef typename vector_n::tag tag; Chris@16: typedef typename vector_n::size size; Chris@16: typedef typename vector_n::category category; Chris@16: typedef typename vector_n::is_view is_view; Chris@16: Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: vector() Chris@16: : vec() {} Chris@16: Chris@16: template Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: vector(vector const& rhs) Chris@16: : vec(rhs.vec) {} Chris@16: Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: vector(vector const& rhs) Chris@16: : vec(rhs.vec) {} Chris@16: Chris@101: template Chris@101: // XXX: Chris@101: #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) Chris@101: FUSION_HASH if !defined(BOOST_CLANG) Chris@101: BOOST_CONSTEXPR Chris@101: FUSION_HASH endif Chris@101: #else Chris@101: #if !defined(BOOST_CLANG) Chris@101: BOOST_CONSTEXPR Chris@16: #endif Chris@101: #endif Chris@101: BOOST_FUSION_GPU_ENABLED Chris@101: vector(Sequence const& rhs, Chris@101: typename boost::enable_if >::type* = 0) Chris@16: : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} Chris@16: Chris@16: // Expand a couple of forwarding constructors for arguments Chris@16: // of type (T0), (T0, T1), (T0, T1, T2) etc. Example: Chris@16: // Chris@16: // vector( Chris@101: // typename detail::call_param::type arg0 Chris@101: // , typename detail::call_param::type arg1) Chris@101: // : vec(arg0, arg1) {} Chris@16: #include Chris@16: Chris@16: template Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: vector& Chris@16: operator=(vector const& rhs) Chris@16: { Chris@16: vec = rhs.vec; Chris@16: return *this; Chris@16: } Chris@16: Chris@16: template Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: vector& Chris@16: operator=(T const& rhs) Chris@16: { Chris@16: vec = rhs; Chris@16: return *this; Chris@16: } Chris@16: Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: vector& Chris@16: operator=(vector const& rhs) Chris@16: { Chris@16: vec = rhs.vec; Chris@16: return *this; Chris@16: } Chris@16: Chris@101: #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) Chris@101: FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) Chris@101: #endif Chris@101: #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \ Chris@101: (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)) Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@101: vector(vector&& rhs) Chris@101: : vec(std::forward(rhs.vec)) {} Chris@101: Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: vector& Chris@16: operator=(vector&& rhs) Chris@16: { Chris@16: vec = std::forward(rhs.vec); Chris@16: return *this; Chris@16: } Chris@16: Chris@16: template Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: vector& Chris@16: operator=(T&& rhs) Chris@16: { Chris@101: vec = BOOST_FUSION_FWD_ELEM(T, rhs); Chris@16: return *this; Chris@16: } Chris@16: #endif Chris@101: #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) Chris@101: FUSION_HASH endif Chris@101: #endif Chris@16: Chris@16: template Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: typename add_reference< Chris@16: typename mpl::at_c::type Chris@16: >::type Chris@16: at_impl(mpl::int_ index) Chris@16: { Chris@16: return vec.at_impl(index); Chris@16: } Chris@16: Chris@16: template Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: typename add_reference< Chris@16: typename add_const< Chris@16: typename mpl::at_c::type Chris@16: >::type Chris@16: >::type Chris@16: at_impl(mpl::int_ index) const Chris@16: { Chris@16: return vec.at_impl(index); Chris@16: } Chris@16: Chris@16: template Chris@101: BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: typename add_reference< Chris@16: typename mpl::at::type Chris@16: >::type Chris@16: at_impl(I /*index*/) Chris@16: { Chris@16: return vec.at_impl(mpl::int_()); Chris@16: } Chris@16: Chris@16: template Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: typename add_reference< Chris@16: typename add_const< Chris@16: typename mpl::at::type Chris@16: >::type Chris@16: >::type Chris@16: at_impl(I /*index*/) const Chris@16: { Chris@16: return vec.at_impl(mpl::int_()); Chris@16: } Chris@16: Chris@16: private: Chris@16: Chris@16: BOOST_FUSION_VECTOR_CTOR_HELPER() Chris@16: vector_n vec; Chris@16: }; Chris@16: }} Chris@16: Chris@16: #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) Chris@16: #pragma wave option(output: null) Chris@16: #endif Chris@16: Chris@16: #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES Chris@16: Chris@101: #undef FUSION_HASH Chris@16: #endif