PageRenderTime 16ms CodeModel.GetById 10ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/src/contrib/boost/mpl/multiset/aux_/count_impl.hpp

http://pythonocc.googlecode.com/
C++ Header | 82 lines | 57 code | 15 blank | 10 comment | 0 complexity | f03d73f663fd62cddaac3e7a9dadf79b MD5 | raw file
 1
 2#ifndef BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
 3#define BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
 4
 5// Copyright Aleksey Gurtovoy 2003-2004
 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// $Id: count_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
14// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
15// $Revision: 49267 $
16
17#include <boost/mpl/multiset/aux_/tag.hpp>
18#include <boost/mpl/count_fwd.hpp>
19#include <boost/mpl/int.hpp>
20#include <boost/mpl/aux_/type_wrapper.hpp>
21#include <boost/mpl/aux_/static_cast.hpp>
22#include <boost/mpl/aux_/config/static_constant.hpp>
23#include <boost/mpl/aux_/config/workaround.hpp>
24#include <boost/mpl/aux_/config/msvc.hpp>
25
26#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
27#   include <boost/mpl/if.hpp>
28#   include <boost/type_traits/is_reference.hpp>
29#endif
30
31namespace boost { namespace mpl {
32
33#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
34
35namespace aux {
36template< typename S, typename U >
37struct multiset_count_impl
38    : int_< sizeof(S::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) - 1 >
39{
40};
41
42template< typename S, typename U >
43struct multiset_count_ref_impl
44{
45    typedef U (* u_)();
46    typedef int_< sizeof(S::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) - 1 > type_;
47    BOOST_STATIC_CONSTANT(int, value = type_::value);
48    typedef type_ type;
49};
50}
51
52template<>
53struct count_impl< aux::multiset_tag >
54{
55    template< typename Set, typename Key > struct apply
56        : if_< 
57              is_reference<Key>
58            , aux::multiset_count_ref_impl<Set,Key>
59            , aux::multiset_count_impl<Set,Key>
60            >::type
61    {
62    };
63};
64
65#else
66
67template<>
68struct count_impl< aux::multiset_tag >
69{
70    template< typename Set, typename Key > struct apply
71    {
72        enum { msvc71_wknd_ = sizeof(Set::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*,0))) - 1 };
73        typedef int_< msvc71_wknd_ > type;
74        BOOST_STATIC_CONSTANT(int, value = msvc71_wknd_);
75    };
76};
77
78#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
79
80}}
81
82#endif // BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED