build_deque.hpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*=============================================================================
  2. Copyright (c) 2005-2013 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. #if !defined(BOOST_FUSION_BUILD_DEQUE_02032013_1921)
  7. #define BOOST_FUSION_BUILD_DEQUE_02032013_1921
  8. #if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
  9. #error "C++03 only! This file should not have been included"
  10. #endif
  11. #include <boost/fusion/sequence/intrinsic/begin.hpp>
  12. #include <boost/fusion/sequence/intrinsic/size.hpp>
  13. #include <boost/fusion/container/deque/detail/cpp03/as_deque.hpp>
  14. #include <boost/fusion/container/deque/front_extended_deque.hpp>
  15. namespace boost { namespace fusion
  16. {
  17. namespace result_of
  18. {
  19. template <typename Sequence>
  20. struct as_deque
  21. : detail::as_deque<result_of::size<Sequence>::value>
  22. {
  23. typedef typename
  24. detail::as_deque<result_of::size<Sequence>::value>
  25. gen;
  26. typedef typename gen::
  27. template apply<typename result_of::begin<Sequence>::type>::type
  28. type;
  29. };
  30. }
  31. template <typename Sequence>
  32. BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
  33. inline typename result_of::as_deque<Sequence>::type
  34. as_deque(Sequence& seq)
  35. {
  36. typedef typename result_of::as_deque<Sequence>::gen gen;
  37. return gen::call(fusion::begin(seq));
  38. }
  39. template <typename Sequence>
  40. BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
  41. inline typename result_of::as_deque<Sequence const>::type
  42. as_deque(Sequence const& seq)
  43. {
  44. typedef typename result_of::as_deque<Sequence const>::gen gen;
  45. return gen::call(fusion::begin(seq));
  46. }
  47. }}
  48. #endif