ossrv_pub/boost_apis/boost/mpl/index_if.hpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 
       
     2 #ifndef BOOST_MPL_INDEX_IF_HPP_INCLUDED
       
     3 #define BOOST_MPL_INDEX_IF_HPP_INCLUDED
       
     4 
       
     5 // Copyright Eric Friedman 2003
       
     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/index_if.hpp,v $
       
    14 // $Date: 2004/09/02 15:40:41 $
       
    15 // $Revision: 1.7 $
       
    16 
       
    17 #include <boost/mpl/aux_/find_if_pred.hpp>
       
    18 #include <boost/mpl/begin_end.hpp>
       
    19 #include <boost/mpl/if.hpp>
       
    20 #include <boost/mpl/int.hpp>
       
    21 #include <boost/mpl/iter_fold_if.hpp>
       
    22 #include <boost/mpl/next.hpp>
       
    23 #include <boost/mpl/void.hpp>
       
    24 #include <boost/mpl/aux_/na_spec.hpp>
       
    25 #include <boost/mpl/aux_/lambda_support.hpp>
       
    26 #include <boost/type_traits/is_same.hpp>
       
    27 
       
    28 namespace boost { namespace mpl {
       
    29 
       
    30 template<
       
    31       typename BOOST_MPL_AUX_NA_PARAM(Sequence)
       
    32     , typename BOOST_MPL_AUX_NA_PARAM(Predicate)
       
    33     >
       
    34 struct index_if
       
    35 {
       
    36     typedef typename iter_fold_if<
       
    37           Sequence
       
    38         , int_<0>
       
    39         , next<>
       
    40         , aux::find_if_pred<Predicate>
       
    41         >::type result_;
       
    42 
       
    43     typedef typename end<Sequence>::type not_found_;
       
    44     typedef typename first<result_>::type result_index_;
       
    45     typedef typename second<result_>::type result_iterator_;
       
    46 
       
    47     typedef typename if_<
       
    48           is_same< result_iterator_,not_found_ >
       
    49         , void_
       
    50         , result_index_
       
    51         >::type type;
       
    52 
       
    53     BOOST_MPL_AUX_LAMBDA_SUPPORT(2,index_if,(Sequence,Predicate))
       
    54 };
       
    55 
       
    56 BOOST_MPL_AUX_NA_SPEC(2, index_if)
       
    57 
       
    58 }}
       
    59 
       
    60 #endif // BOOST_MPL_INDEX_IF_HPP_INCLUDED