1 /*============================================================================= 2 Copyright (c) 2001-2011 Joel de Guzman 3 Copyright (c) 2005-2006 Dan Marsden 4 Copyright (c) 2009-2010 Christopher Schmidt 5 6 Distributed under the Boost Software License, Version 1.0. (See accompanying 7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 8 ==============================================================================*/ 9 10 #ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_BEGIN_IMPL_HPP 11 #define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_BEGIN_IMPL_HPP 12 13 #include <boost/fusion/support/config.hpp> 14 #include <boost/fusion/iterator/basic_iterator.hpp> 15 16 namespace boost { namespace fusion { namespace extension 17 { 18 template<typename> 19 struct begin_impl; 20 21 template <> 22 struct begin_impl<struct_tag> 23 { 24 template <typename Seq> 25 struct apply 26 { 27 typedef 28 basic_iterator< 29 struct_iterator_tag 30 , random_access_traversal_tag 31 , Seq 32 , 0 33 > 34 type; 35 36 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED 37 static type callboost::fusion::extension::begin_impl::apply38 call(Seq& seq) 39 { 40 return type(seq,0); 41 } 42 }; 43 }; 44 45 template <> 46 struct begin_impl<assoc_struct_tag> 47 { 48 template <typename Seq> 49 struct apply 50 { 51 typedef 52 basic_iterator< 53 struct_iterator_tag 54 , assoc_struct_category 55 , Seq 56 , 0 57 > 58 type; 59 60 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED 61 static type callboost::fusion::extension::begin_impl::apply62 call(Seq& seq) 63 { 64 return type(seq,0); 65 } 66 }; 67 }; 68 }}} 69 70 #endif 71