diff options
author | Chanho Park <chanho61.park@samsung.com> | 2014-12-11 18:55:56 +0900 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-12-11 18:55:56 +0900 |
commit | 08c1e93fa36a49f49325a07fe91ff92c964c2b6c (patch) | |
tree | 7a7053ceb8874b28ec4b868d4c49b500008a102e /boost/fusion/container/deque/detail/build_deque.hpp | |
parent | bb4dd8289b351fae6b55e303f189127a394a1edd (diff) | |
download | boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.gz boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.bz2 boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.zip |
Imported Upstream version 1.57.0upstream/1.57.0
Diffstat (limited to 'boost/fusion/container/deque/detail/build_deque.hpp')
-rw-r--r-- | boost/fusion/container/deque/detail/build_deque.hpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/boost/fusion/container/deque/detail/build_deque.hpp b/boost/fusion/container/deque/detail/build_deque.hpp new file mode 100644 index 0000000000..d555c6c61c --- /dev/null +++ b/boost/fusion/container/deque/detail/build_deque.hpp @@ -0,0 +1,78 @@ +/*============================================================================= + Copyright (c) 2005-2013 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(BOOST_FUSION_BUILD_DEQUE_02032013_1921) +#define BOOST_FUSION_BUILD_DEQUE_02032013_1921 + +#include <boost/fusion/support/config.hpp> +#include <boost/fusion/iterator/equal_to.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/iterator/deref.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/container/deque/front_extended_deque.hpp> + +namespace boost { namespace fusion { namespace detail +{ + template <typename First, typename Last + , bool is_empty = result_of::equal_to<First, Last>::value> + struct build_deque; + + template <typename First, typename Last> + struct build_deque<First, Last, true> + { + typedef deque<> type; + BOOST_FUSION_GPU_ENABLED + static type + call(First const&, Last const&) + { + return type(); + } + }; + + template <typename T, typename Rest> + struct push_front_deque; + + template <typename T, typename ...Rest> + struct push_front_deque<T, deque<Rest...>> + { + typedef deque<T, Rest...> type; + + BOOST_FUSION_GPU_ENABLED + static type + call(T const& first, deque<Rest...> const& rest) + { + return type(front_extended_deque<deque<Rest...>, T>(rest, first)); + } + }; + + template <typename First, typename Last> + struct build_deque<First, Last, false> + { + typedef + build_deque<typename result_of::next<First>::type, Last> + next_build_deque; + + typedef push_front_deque< + typename result_of::value_of<First>::type + , typename next_build_deque::type> + push_front; + + typedef typename push_front::type type; + + BOOST_FUSION_GPU_ENABLED + static type + call(First const& f, Last const& l) + { + typename result_of::value_of<First>::type v = *f; + return push_front::call( + v, next_build_deque::call(fusion::next(f), l)); + } + }; +}}} + +#endif |