]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/index_if.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
5c1b7171f59032be753dea3df76f1fe9bf3ac7a3
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / index_if.hpp
1 \r
2 #ifndef BOOST_MPL_INDEX_IF_HPP_INCLUDED\r
3 #define BOOST_MPL_INDEX_IF_HPP_INCLUDED\r
4 \r
5 // Copyright Eric Friedman 2003\r
6 //\r
7 // Distributed under the Boost Software License, Version 1.0. \r
8 // (See accompanying file LICENSE_1_0.txt or copy at \r
9 // http://www.boost.org/LICENSE_1_0.txt)\r
10 //\r
11 // See http://www.boost.org/libs/mpl for documentation.\r
12 \r
13 // $Id: index_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\r
14 // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $\r
15 // $Revision: 49267 $\r
16 \r
17 #include <boost/mpl/aux_/find_if_pred.hpp>\r
18 #include <boost/mpl/begin_end.hpp>\r
19 #include <boost/mpl/if.hpp>\r
20 #include <boost/mpl/int.hpp>\r
21 #include <boost/mpl/iter_fold_if.hpp>\r
22 #include <boost/mpl/next.hpp>\r
23 #include <boost/mpl/void.hpp>\r
24 #include <boost/mpl/aux_/na_spec.hpp>\r
25 #include <boost/mpl/aux_/lambda_support.hpp>\r
26 #include <boost/type_traits/is_same.hpp>\r
27 \r
28 namespace boost { namespace mpl {\r
29 \r
30 template<\r
31       typename BOOST_MPL_AUX_NA_PARAM(Sequence)\r
32     , typename BOOST_MPL_AUX_NA_PARAM(Predicate)\r
33     >\r
34 struct index_if\r
35 {\r
36     typedef typename iter_fold_if<\r
37           Sequence\r
38         , int_<0>\r
39         , next<>\r
40         , aux::find_if_pred<Predicate>\r
41         >::type result_;\r
42 \r
43     typedef typename end<Sequence>::type not_found_;\r
44     typedef typename first<result_>::type result_index_;\r
45     typedef typename second<result_>::type result_iterator_;\r
46 \r
47     typedef typename if_<\r
48           is_same< result_iterator_,not_found_ >\r
49         , void_\r
50         , result_index_\r
51         >::type type;\r
52 \r
53     BOOST_MPL_AUX_LAMBDA_SUPPORT(2,index_if,(Sequence,Predicate))\r
54 };\r
55 \r
56 BOOST_MPL_AUX_NA_SPEC(2, index_if)\r
57 \r
58 }}\r
59 \r
60 #endif // BOOST_MPL_INDEX_IF_HPP_INCLUDED\r