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