Blame view

3rdparty/boost_1_81_0/boost/detail/bitmask.hpp 2.96 KB
63e88f80   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  //  boost/detail/bitmask.hpp  ------------------------------------------------//
  
  //  Copyright Beman Dawes 2006
  
  //  Distributed under the Boost Software License, Version 1.0
  //  http://www.boost.org/LICENSE_1_0.txt
  
  //  Usage:  enum foo { a=1, b=2, c=4 };
  //          BOOST_BITMASK( foo )
  //
  //          void f( foo arg );
  //          ...
  //          f( a | c );
  //
  //  See [bitmask.types] in the C++ standard for the formal specification
  
  #ifndef BOOST_BITMASK_HPP
  #define BOOST_BITMASK_HPP
  
  #include <boost/config.hpp>
  #include <boost/cstdint.hpp>
  
  #define BOOST_BITMASK(Bitmask)                                            \
                                                                            \
    inline BOOST_CONSTEXPR Bitmask operator| (Bitmask x , Bitmask y )       \
    { return static_cast<Bitmask>( static_cast<boost::int_least32_t>(x)     \
        | static_cast<boost::int_least32_t>(y)); }                          \
                                                                            \
    inline BOOST_CONSTEXPR Bitmask operator& (Bitmask x , Bitmask y )       \
    { return static_cast<Bitmask>( static_cast<boost::int_least32_t>(x)     \
        & static_cast<boost::int_least32_t>(y)); }                          \
                                                                            \
    inline BOOST_CONSTEXPR Bitmask operator^ (Bitmask x , Bitmask y )       \
    { return static_cast<Bitmask>( static_cast<boost::int_least32_t>(x)     \
        ^ static_cast<boost::int_least32_t>(y)); }                          \
                                                                            \
    inline BOOST_CONSTEXPR Bitmask operator~ (Bitmask x )                   \
    { return static_cast<Bitmask>(~static_cast<boost::int_least32_t>(x)); } \
                                                                            \
    inline Bitmask & operator&=(Bitmask& x , Bitmask y)                     \
    { x = x & y ; return x ; }                                              \
                                                                            \
    inline Bitmask & operator|=(Bitmask& x , Bitmask y)                     \
    { x = x | y ; return x ; }                                              \
                                                                            \
    inline Bitmask & operator^=(Bitmask& x , Bitmask y)                     \
    { x = x ^ y ; return x ; }                                              \
                                                                            \
    /* Boost extensions to [bitmask.types] */                               \
                                                                            \
    inline BOOST_CONSTEXPR bool operator!(Bitmask x)                        \
    { return !static_cast<int>(x); }                                        \
                                                                            \
    inline BOOST_CONSTEXPR bool bitmask_set(Bitmask x)                      \
    { return !!x; }
  
  #endif // BOOST_BITMASK_HPP