epoc32/include/stdapis/boost/mpl/max_element.hpp
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     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