summaryrefslogtreecommitdiff
path: root/boost/fusion/container/vector/detail/cpp03/vector.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/fusion/container/vector/detail/cpp03/vector.hpp')
-rw-r--r--boost/fusion/container/vector/detail/cpp03/vector.hpp247
1 files changed, 247 insertions, 0 deletions
diff --git a/boost/fusion/container/vector/detail/cpp03/vector.hpp b/boost/fusion/container/vector/detail/cpp03/vector.hpp
new file mode 100644
index 0000000000..5dcd688650
--- /dev/null
+++ b/boost/fusion/container/vector/detail/cpp03/vector.hpp
@@ -0,0 +1,247 @@
+/*=============================================================================
+ 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 <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/fusion/support/config.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/container/vector/vector_fwd.hpp>
+#include <boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/core/enable_if.hpp>
+
+#define FUSION_HASH #
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)
+
+#define BOOST_FUSION_VECTOR_COPY_INIT() \
+ ctor_helper(rhs, is_base_of<vector, Sequence>()) \
+
+#define BOOST_FUSION_VECTOR_CTOR_HELPER() \
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
+ static vector_n const& \
+ ctor_helper(vector const& rhs, mpl::true_) \
+ { \
+ return rhs.vec; \
+ } \
+ \
+ template <typename T> \
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
+ 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
+
+#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
+#include <boost/fusion/container/vector/detail/cpp03/preprocessed/vector.hpp>
+#else
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+#pragma wave option(preserve: 2, line: 0, output: "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 <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename T)>
+ struct vector
+ : sequence_base<vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> >
+ {
+ private:
+
+ typedef typename detail::vector_n_chooser<
+ BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>::type
+ vector_n;
+
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
+ 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;
+
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector()
+ : vec() {}
+
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs)
+ : vec(rhs.vec) {}
+
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector(vector const& rhs)
+ : vec(rhs.vec) {}
+
+ template <typename Sequence>
+ BOOST_FUSION_GPU_ENABLED
+ vector(Sequence const& rhs,
+ typename boost::enable_if<traits::is_sequence<Sequence> >::type* = 0)
+ : 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<T0>::type arg0
+ // , typename detail::call_param<T1>::type arg1)
+ // : vec(arg0, arg1) {}
+ #include <boost/fusion/container/vector/detail/cpp03/vector_forward_ctor.hpp>
+
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename U)>
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, U)> const& rhs)
+ {
+ vec = rhs.vec;
+ return *this;
+ }
+
+ template <typename T>
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(T const& rhs)
+ {
+ vec = rhs;
+ return *this;
+ }
+
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector const& rhs)
+ {
+ vec = rhs.vec;
+ return *this;
+ }
+
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#endif
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
+ (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector(vector&& rhs)
+ : vec(std::forward<vector_n>(rhs.vec)) {}
+
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(vector&& rhs)
+ {
+ vec = std::forward<vector_n>(rhs.vec);
+ return *this;
+ }
+
+ template <typename T>
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ vector&
+ operator=(T&& rhs)
+ {
+ vec = BOOST_FUSION_FWD_ELEM(T, rhs);
+ return *this;
+ }
+#endif
+#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
+FUSION_HASH endif
+#endif
+
+ template <int N>
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ typename add_reference<
+ typename mpl::at_c<types, N>::type
+ >::type
+ at_impl(mpl::int_<N> index)
+ {
+ return vec.at_impl(index);
+ }
+
+ template <int N>
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ typename add_reference<
+ typename add_const<
+ typename mpl::at_c<types, N>::type
+ >::type
+ >::type
+ at_impl(mpl::int_<N> index) const
+ {
+ return vec.at_impl(index);
+ }
+
+ template <typename I>
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ typename add_reference<
+ typename mpl::at<types, I>::type
+ >::type
+ at_impl(I /*index*/)
+ {
+ return vec.at_impl(mpl::int_<I::value>());
+ }
+
+ template<typename I>
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ typename add_reference<
+ typename add_const<
+ typename mpl::at<types, I>::type
+ >::type
+ >::type
+ at_impl(I /*index*/) const
+ {
+ return vec.at_impl(mpl::int_<I::value>());
+ }
+
+ 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
+
+#undef FUSION_HASH
+#endif