Chris@16
|
1
|
Chris@16
|
2 #ifndef BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED
|
Chris@16
|
3 #define BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED
|
Chris@16
|
4
|
Chris@16
|
5 // Copyright Aleksey Gurtovoy 2003-2007
|
Chris@16
|
6 // Copyright David Abrahams 2003-2004
|
Chris@16
|
7 //
|
Chris@16
|
8 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
9 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
10 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
11 //
|
Chris@16
|
12 // See http://www.boost.org/libs/mpl for documentation.
|
Chris@16
|
13
|
Chris@101
|
14 // $Id$
|
Chris@101
|
15 // $Date$
|
Chris@101
|
16 // $Revision$
|
Chris@16
|
17
|
Chris@16
|
18 #include <boost/mpl/insert_fwd.hpp>
|
Chris@16
|
19 #include <boost/mpl/set/aux_/has_key_impl.hpp>
|
Chris@16
|
20 #include <boost/mpl/set/aux_/item.hpp>
|
Chris@16
|
21 #include <boost/mpl/set/aux_/tag.hpp>
|
Chris@16
|
22 #include <boost/mpl/identity.hpp>
|
Chris@16
|
23 #include <boost/mpl/base.hpp>
|
Chris@16
|
24 #include <boost/mpl/eval_if.hpp>
|
Chris@16
|
25 #include <boost/mpl/aux_/na.hpp>
|
Chris@16
|
26
|
Chris@16
|
27 #include <boost/type_traits/is_same.hpp>
|
Chris@16
|
28
|
Chris@16
|
29 namespace boost { namespace mpl {
|
Chris@16
|
30
|
Chris@16
|
31 namespace aux {
|
Chris@16
|
32 template< typename Set, typename T > struct set_insert_impl
|
Chris@16
|
33 : eval_if<
|
Chris@16
|
34 has_key_impl<aux::set_tag>::apply<Set,T>
|
Chris@16
|
35 , identity<Set>
|
Chris@16
|
36 , eval_if<
|
Chris@16
|
37 is_same< T,typename Set::last_masked_ >
|
Chris@16
|
38 , base<Set>
|
Chris@16
|
39 , identity< s_item<T,typename Set::item_> >
|
Chris@16
|
40 >
|
Chris@16
|
41 >
|
Chris@16
|
42 {
|
Chris@16
|
43 };
|
Chris@16
|
44 }
|
Chris@16
|
45
|
Chris@16
|
46 template<>
|
Chris@16
|
47 struct insert_impl< aux::set_tag >
|
Chris@16
|
48 {
|
Chris@16
|
49 template<
|
Chris@16
|
50 typename Set
|
Chris@16
|
51 , typename PosOrKey
|
Chris@16
|
52 , typename KeyOrNA
|
Chris@16
|
53 >
|
Chris@16
|
54 struct apply
|
Chris@16
|
55 : aux::set_insert_impl<
|
Chris@16
|
56 Set
|
Chris@16
|
57 , typename if_na<KeyOrNA,PosOrKey>::type
|
Chris@16
|
58 >
|
Chris@16
|
59 {
|
Chris@16
|
60 };
|
Chris@16
|
61 };
|
Chris@16
|
62
|
Chris@16
|
63 }}
|
Chris@16
|
64
|
Chris@16
|
65 #endif // BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED
|