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

Private GIT Repository
f5d80456c3dd42388ce9a61d96eb0a772a7b452b
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / push_back_impl.hpp
1 \r
2 #ifndef BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED\r
3 #define BOOST_MPL_AUX_PUSH_BACK_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_back_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_back_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_back_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_back' implementation below\r
32 template< typename Tag >\r
33 struct push_back_impl\r
34 {\r
35     template< typename Sequence, typename T > struct apply\r
36     {\r
37         // should be instantiated only in the context of 'has_push_back_impl';\r
38         // if you've got an assert here, you are requesting a 'push_back' \r
39         // specialization that doesn't exist.\r
40         BOOST_MPL_ASSERT_MSG(\r
41               ( boost::is_same< T, has_push_back_arg >::value )\r
42             , REQUESTED_PUSH_BACK_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST\r
43             , ( Sequence )\r
44             );\r
45     };\r
46 };\r
47 \r
48 template< typename Tag >\r
49 struct has_push_back_impl\r
50 {\r
51     template< typename Seq > struct apply\r
52 #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\r
53         : aux::has_type< push_back< Seq, has_push_back_arg > >\r
54     {\r
55 #else\r
56     {\r
57         typedef aux::has_type< push_back< Seq, has_push_back_arg > > type;\r
58         BOOST_STATIC_CONSTANT(bool, value = \r
59               (aux::has_type< push_back< Seq, has_push_back_arg > >::value)\r
60             );\r
61 #endif\r
62     };\r
63 };\r
64 \r
65 BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_back_impl)\r
66 BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_back_impl)\r
67 \r
68 }}\r
69 \r
70 #endif // BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED\r