ossrv_pub/boost_apis/boost/mpl/max_element.hpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 
       
     2 #ifndef BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED
       
     3 #define BOOST_MPL_MAX_ELEMENT_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 // $Source: /cvsroot/boost/boost/boost/mpl/max_element.hpp,v $
       
    14 // $Date: 2004/09/02 15:40:41 $
       
    15 // $Revision: 1.7 $
       
    16 
       
    17 #include <boost/mpl/less.hpp>
       
    18 #include <boost/mpl/iter_fold.hpp>
       
    19 #include <boost/mpl/begin_end.hpp>
       
    20 #include <boost/mpl/if.hpp>
       
    21 #include <boost/mpl/deref.hpp>
       
    22 #include <boost/mpl/apply.hpp>
       
    23 #include <boost/mpl/aux_/common_name_wknd.hpp>
       
    24 #include <boost/mpl/aux_/na_spec.hpp>
       
    25 
       
    26 namespace boost { namespace mpl {
       
    27 
       
    28 BOOST_MPL_AUX_COMMON_NAME_WKND(max_element)
       
    29 
       
    30 namespace aux {
       
    31 
       
    32 template< typename Predicate >
       
    33 struct select_max
       
    34 {
       
    35     template< typename OldIterator, typename Iterator >
       
    36     struct apply
       
    37     {
       
    38         typedef typename apply2<
       
    39               Predicate
       
    40             , typename deref<OldIterator>::type
       
    41             , typename deref<Iterator>::type
       
    42             >::type condition_;
       
    43 
       
    44         typedef typename if_<
       
    45               condition_
       
    46             , Iterator
       
    47             , OldIterator
       
    48             >::type type;
       
    49     };
       
    50 };
       
    51 
       
    52 } // namespace aux 
       
    53 
       
    54 
       
    55 template<
       
    56       typename BOOST_MPL_AUX_NA_PARAM(Sequence)
       
    57     , typename Predicate = less<_,_>
       
    58     >
       
    59 struct max_element
       
    60     : iter_fold<
       
    61           Sequence
       
    62         , typename begin<Sequence>::type
       
    63         , protect< aux::select_max<Predicate> >
       
    64         >
       
    65 {
       
    66 };
       
    67 
       
    68 BOOST_MPL_AUX_NA_SPEC(1, max_element)
       
    69 
       
    70 }}
       
    71 
       
    72 #endif // BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED