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

Private GIT Repository
9e3fd827d02dc0984b645bd1ba2ac04380fb264e
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / push_front_impl.hpp
1 \r
2 #ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\r
3 #define BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\r
4 \r
5 // Copyright Aleksey Gurtovoy 2000-2008\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: push_front_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $\r
14 // $Date: 2009-08-20 03:50:16 -0400 (Thu, 20 Aug 2009) $\r
15 // $Revision: 55679 $\r
16 \r
17 #include <boost/mpl/push_front_fwd.hpp>\r
18 #include <boost/mpl/assert.hpp>\r
19 #include <boost/mpl/aux_/has_type.hpp>\r
20 #include <boost/mpl/aux_/traits_lambda_spec.hpp>\r
21 #include <boost/mpl/aux_/config/forwarding.hpp>\r
22 #include <boost/mpl/aux_/config/static_constant.hpp>\r
23 \r
24 #include <boost/type_traits/is_same.hpp>\r
25 \r
26 namespace boost { namespace mpl {\r
27 \r
28 struct has_push_front_arg {};\r
29 \r
30 // agurt 05/feb/04: no default implementation; the stub definition is needed \r
31 // to enable the default 'has_push_front' implementation below\r
32 \r
33 template< typename Tag >\r
34 struct push_front_impl\r
35 {\r
36     template< typename Sequence, typename T > struct apply\r
37     {\r
38         // should be instantiated only in the context of 'has_push_front_impl';\r
39         // if you've got an assert here, you are requesting a 'push_front' \r
40         // specialization that doesn't exist.\r
41         BOOST_MPL_ASSERT_MSG(\r
42               ( boost::is_same< T, has_push_front_arg >::value )\r
43             , REQUESTED_PUSH_FRONT_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST\r
44             , ( Sequence )\r
45             );\r
46     };\r
47 };\r
48 \r
49 template< typename Tag >\r
50 struct has_push_front_impl\r
51 {\r
52     template< typename Seq > struct apply\r
53 #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\r
54         : aux::has_type< push_front< Seq, has_push_front_arg > >\r
55     {\r
56 #else\r
57     {\r
58         typedef aux::has_type< push_front< Seq, has_push_front_arg > > type;\r
59         BOOST_STATIC_CONSTANT(bool, value = \r
60               (aux::has_type< push_front< Seq, has_push_front_arg > >::value)\r
61             );\r
62 #endif\r
63     };\r
64 };\r
65 \r
66 BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_front_impl)\r
67 BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_front_impl)\r
68 \r
69 }}\r
70 \r
71 #endif // BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\r