BVB Source Codes

mars Show pair_view.hpp Source code

Return Download mars: download pair_view.hpp Source code - Download mars Source code - Type:.hpp
  1.  
  2. #ifndef BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
  3. #define BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
  4.  
  5. // Copyright David Abrahams 2003-2004
  6. // Copyright Aleksey Gurtovoy 2004
  7. //
  8. // Distributed under the Boost Software License, Version 1.0.
  9. // (See accompanying file LICENSE_1_0.txt or copy at
  10. // http://www.boost.org/LICENSE_1_0.txt)
  11. //
  12. // See http://www.boost.org/libs/mpl for documentation.
  13.  
  14. // $Id$
  15. // $Date$
  16. // $Revision$
  17.  
  18. #include <boost/mpl/begin_end.hpp>
  19. #include <boost/mpl/iterator_category.hpp>
  20. #include <boost/mpl/advance.hpp>
  21. #include <boost/mpl/distance.hpp>
  22. #include <boost/mpl/next_prior.hpp>
  23. #include <boost/mpl/deref.hpp>
  24. #include <boost/mpl/min_max.hpp>
  25. #include <boost/mpl/pair.hpp>
  26. #include <boost/mpl/iterator_tags.hpp>
  27. #include <boost/mpl/aux_/config/ctps.hpp>
  28. #include <boost/mpl/aux_/na_spec.hpp>
  29.  
  30. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace mpl {
  31.  
  32. namespace aux {
  33. struct pair_iter_tag;
  34.  
  35. #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
  36.  
  37. template< typename Iter1, typename Iter2, typename Category >
  38. struct pair_iter;
  39.  
  40. template< typename Category > struct prior_pair_iter
  41. {
  42.     template< typename Iter1, typename Iter2 > struct apply
  43.     {
  44.         typedef typename mpl::prior<Iter1>::type i1_;
  45.         typedef typename mpl::prior<Iter2>::type i2_;
  46.         typedef pair_iter<i1_,i2_,Category> type;
  47.     };
  48. };
  49.  
  50. template<> struct prior_pair_iter<forward_iterator_tag>
  51. {
  52.     template< typename Iter1, typename Iter2 > struct apply
  53.     {
  54.         typedef pair_iter<Iter1,Iter2,forward_iterator_tag> type;
  55.     };
  56. };
  57.  
  58. #endif
  59. }
  60.  
  61. template<
  62.       typename Iter1
  63.     , typename Iter2
  64.     , typename Category
  65.     >
  66. struct pair_iter
  67. {
  68.     typedef aux::pair_iter_tag tag;
  69.     typedef Category category;
  70.     typedef Iter1 first;
  71.     typedef Iter2 second;
  72.    
  73. #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
  74.     typedef pair<
  75.           typename deref<Iter1>::type
  76.         , typename deref<Iter2>::type
  77.         > type;
  78.  
  79.     typedef typename mpl::next<Iter1>::type i1_;
  80.     typedef typename mpl::next<Iter2>::type i2_;
  81.     typedef pair_iter<i1_,i2_,Category> next;
  82.    
  83.     typedef apply_wrap2< aux::prior_pair_iter<Category>,Iter1,Iter2 >::type prior;
  84. #endif
  85. };
  86.  
  87.  
  88. #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
  89.  
  90. template< typename Iter1, typename Iter2, typename C >
  91. struct deref< pair_iter<Iter1,Iter2,C> >
  92. {
  93.     typedef pair<
  94.           typename deref<Iter1>::type
  95.         , typename deref<Iter2>::type
  96.         > type;
  97. };
  98.  
  99. template< typename Iter1, typename Iter2, typename C >
  100. struct next< pair_iter<Iter1,Iter2,C> >
  101. {
  102.     typedef typename mpl::next<Iter1>::type i1_;
  103.     typedef typename mpl::next<Iter2>::type i2_;
  104.     typedef pair_iter<i1_,i2_,C> type;
  105. };
  106.  
  107. template< typename Iter1, typename Iter2, typename C >
  108. struct prior< pair_iter<Iter1,Iter2,C> >
  109. {
  110.     typedef typename mpl::prior<Iter1>::type i1_;
  111.     typedef typename mpl::prior<Iter2>::type i2_;
  112.     typedef pair_iter<i1_,i2_,C> type;
  113. };
  114.  
  115. #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
  116.  
  117.  
  118. template<> struct advance_impl<aux::pair_iter_tag>
  119. {
  120.     template< typename Iter, typename D > struct apply
  121.     {
  122.         typedef typename mpl::advance< typename Iter::first,D >::type i1_;
  123.         typedef typename mpl::advance< typename Iter::second,D >::type i2_;
  124.         typedef pair_iter<i1_,i2_,typename Iter::category> type;
  125.     };
  126. };
  127.  
  128. template<> struct distance_impl<aux::pair_iter_tag>
  129. {
  130.     template< typename Iter1, typename Iter2 > struct apply
  131.     {
  132.         // agurt, 10/nov/04: MSVC 6.5 ICE-s on forwarding
  133.         typedef typename mpl::distance<
  134.               typename first<Iter1>::type
  135.             , typename first<Iter2>::type
  136.             >::type type;
  137.     };
  138. };
  139.  
  140.  
  141. template<
  142.       typename BOOST_MPL_AUX_NA_PARAM(Sequence1)
  143.     , typename BOOST_MPL_AUX_NA_PARAM(Sequence2)
  144.     >
  145. struct pair_view
  146. {
  147.     typedef nested_begin_end_tag tag;
  148.  
  149.     typedef typename begin<Sequence1>::type iter1_;
  150.     typedef typename begin<Sequence2>::type iter2_;
  151.     typedef typename min<
  152.           typename iterator_category<iter1_>::type
  153.         , typename iterator_category<iter2_>::type
  154.         >::type category_;
  155.    
  156.     typedef pair_iter<iter1_,iter2_,category_> begin;
  157.    
  158.     typedef pair_iter<
  159.           typename end<Sequence1>::type
  160.         , typename end<Sequence2>::type
  161.         , category_
  162.         > end;
  163. };
  164.  
  165. BOOST_MPL_AUX_NA_SPEC(2, pair_view)
  166.  
  167. }}
  168.  
  169. #endif // BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
  170.  
downloadpair_view.hpp Source code - Download mars Source code
Related Source Codes/Software:
Hero - Elegant transition library for iOS & tvOS 2017-06-09
deep-photo-styletransfer - Code and data for paper "Deep Photo Style Transfer... 2017-06-09
mastodon - A GNU Social-compatible microblogging server ... 2017-06-09
plyr - A simple HTML5, YouTube and Vimeo player ... 2017-06-08
prepack - Prepack is a partial evaluator for JavaScript. Pre... 2017-06-08
Public-APIs - 2017-06-09
lottie-ios - An iOS library to natively render After Effects ve... 2017-06-09
Awesome-Hacking - A collection of various awesome lists for hackers,... 2017-06-09
algorithms - Minimal examples of data structures and algorithms... 2017-06-10
lectures - Oxford Deep NLP 2017 course 2017-06-10
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top