1 2 #ifndef BOOST_MPL_JOINT_VIEW_HPP_INCLUDED 3 #define BOOST_MPL_JOINT_VIEW_HPP_INCLUDED 4 5 // Copyright Aleksey Gurtovoy 2000-2004 6 // 7 // Distributed under the Boost Software License, Version 1.0. 8 // (See accompanying file LICENSE_1_0.txt or copy at 9 // http://www.boost.org/LICENSE_1_0.txt) 10 // 11 // See http://www.boost.org/libs/mpl for documentation. 12 13 // $Id$ 14 // $Date$ 15 // $Revision$ 16 17 #include <boost/mpl/aux_/joint_iter.hpp> 18 #include <boost/mpl/plus.hpp> 19 #include <boost/mpl/size_fwd.hpp> 20 #include <boost/mpl/begin_end.hpp> 21 #include <boost/mpl/aux_/na_spec.hpp> 22 23 namespace boost { namespace mpl { 24 25 namespace aux { 26 struct joint_view_tag; 27 } 28 29 template<> 30 struct size_impl< aux::joint_view_tag > 31 { 32 template < typename JointView > struct apply 33 : plus< 34 size<typename JointView::sequence1_> 35 , size<typename JointView::sequence2_> 36 > 37 {}; 38 }; 39 40 template< 41 typename BOOST_MPL_AUX_NA_PARAM(Sequence1_) 42 , typename BOOST_MPL_AUX_NA_PARAM(Sequence2_) 43 > 44 struct joint_view 45 { 46 typedef typename mpl::begin<Sequence1_>::type first1_; 47 typedef typename mpl::end<Sequence1_>::type last1_; 48 typedef typename mpl::begin<Sequence2_>::type first2_; 49 typedef typename mpl::end<Sequence2_>::type last2_; 50 51 // agurt, 25/may/03: for the 'size_traits' implementation above 52 typedef Sequence1_ sequence1_; 53 typedef Sequence2_ sequence2_; 54 55 typedef joint_view type; 56 typedef aux::joint_view_tag tag; 57 typedef joint_iter<first1_,last1_,first2_> begin; 58 typedef joint_iter<last1_,last1_,last2_> end; 59 }; 60 61 BOOST_MPL_AUX_NA_SPEC(2, joint_view) 62 63 }} 64 65 #endif // BOOST_MPL_JOINT_VIEW_HPP_INCLUDED 66