/root/bitcoin/src/util/bitset.h
Line | Count | Source |
1 | | // Copyright (c) The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #ifndef BITCOIN_UTIL_BITSET_H |
6 | | #define BITCOIN_UTIL_BITSET_H |
7 | | |
8 | | #include <util/check.h> |
9 | | #include <util/overflow.h> |
10 | | |
11 | | #include <array> |
12 | | #include <bit> |
13 | | #include <cstdint> |
14 | | #include <limits> |
15 | | #include <type_traits> |
16 | | |
17 | | /* This file provides data types similar to std::bitset, but adds the following functionality: |
18 | | * |
19 | | * - Efficient iteration over all set bits (compatible with range-based for loops). |
20 | | * - Efficient search for the first and last set bit (First() and Last()). |
21 | | * - Efficient set subtraction: (a - b) implements "a and not b". |
22 | | * - Efficient non-strict subset/superset testing: IsSubsetOf() and IsSupersetOf(). |
23 | | * - Efficient set overlap testing: a.Overlaps(b) |
24 | | * - Efficient construction of set containing 0..N-1 (S::Fill). |
25 | | * - Efficient construction of a single set (S::Singleton). |
26 | | * - Construction from initializer lists. |
27 | | * |
28 | | * Other differences: |
29 | | * - BitSet<N> is a bitset that supports at least N elements, but may support more (Size() reports |
30 | | * the actual number). Because the actual number is unpredictable, there are no operations that |
31 | | * affect all positions (like std::bitset's operator~, flip(), or all()). |
32 | | * - Various other unimplemented features. |
33 | | */ |
34 | | |
35 | | namespace bitset_detail { |
36 | | |
37 | | /** Count the number of bits set in an unsigned integer type. */ |
38 | | template<typename I> |
39 | | unsigned inline constexpr PopCount(I v) |
40 | 129M | { |
41 | 129M | static_assert(std::is_integral_v<I> && std::is_unsigned_v<I> && std::numeric_limits<I>::radix == 2); |
42 | 129M | constexpr auto BITS = std::numeric_limits<I>::digits; |
43 | | // Algorithms from https://en.wikipedia.org/wiki/Hamming_weight#Efficient_implementation. |
44 | | // These seem to be faster than std::popcount when compiling for non-SSE4 on x86_64. |
45 | 129M | if constexpr (BITS <= 32) { |
46 | 2.97M | v -= (v >> 1) & 0x55555555; |
47 | 2.97M | v = (v & 0x33333333) + ((v >> 2) & 0x33333333); |
48 | 2.97M | v = (v + (v >> 4)) & 0x0f0f0f0f; |
49 | 2.97M | if constexpr (BITS > 8) v += v >> 8; |
50 | 2.97M | if constexpr (BITS > 16) v += v >> 16; |
51 | 2.97M | return v & 0x3f; |
52 | 126M | } else { |
53 | 126M | static_assert(BITS <= 64); |
54 | 126M | v -= (v >> 1) & 0x5555555555555555; |
55 | 126M | v = (v & 0x3333333333333333) + ((v >> 2) & 0x3333333333333333); |
56 | 126M | v = (v + (v >> 4)) & 0x0f0f0f0f0f0f0f0f; |
57 | 126M | return (v * uint64_t{0x0101010101010101}) >> 56; |
58 | 126M | } |
59 | 129M | } _ZN13bitset_detail8PopCountItEEjT_ Line | Count | Source | 40 | 515k | { | 41 | 515k | static_assert(std::is_integral_v<I> && std::is_unsigned_v<I> && std::numeric_limits<I>::radix == 2); | 42 | 515k | constexpr auto BITS = std::numeric_limits<I>::digits; | 43 | | // Algorithms from https://en.wikipedia.org/wiki/Hamming_weight#Efficient_implementation. | 44 | | // These seem to be faster than std::popcount when compiling for non-SSE4 on x86_64. | 45 | 515k | if constexpr (BITS <= 32) { | 46 | 515k | v -= (v >> 1) & 0x55555555; | 47 | 515k | v = (v & 0x33333333) + ((v >> 2) & 0x33333333); | 48 | 515k | v = (v + (v >> 4)) & 0x0f0f0f0f; | 49 | 515k | if constexpr (BITS > 8) v += v >> 8; | 50 | | if constexpr (BITS > 16) v += v >> 16; | 51 | 515k | return v & 0x3f; | 52 | | } else { | 53 | | static_assert(BITS <= 64); | 54 | | v -= (v >> 1) & 0x5555555555555555; | 55 | | v = (v & 0x3333333333333333) + ((v >> 2) & 0x3333333333333333); | 56 | | v = (v + (v >> 4)) & 0x0f0f0f0f0f0f0f0f; | 57 | | return (v * uint64_t{0x0101010101010101}) >> 56; | 58 | | } | 59 | 515k | } |
_ZN13bitset_detail8PopCountIjEEjT_ Line | Count | Source | 40 | 2.46M | { | 41 | 2.46M | static_assert(std::is_integral_v<I> && std::is_unsigned_v<I> && std::numeric_limits<I>::radix == 2); | 42 | 2.46M | constexpr auto BITS = std::numeric_limits<I>::digits; | 43 | | // Algorithms from https://en.wikipedia.org/wiki/Hamming_weight#Efficient_implementation. | 44 | | // These seem to be faster than std::popcount when compiling for non-SSE4 on x86_64. | 45 | 2.46M | if constexpr (BITS <= 32) { | 46 | 2.46M | v -= (v >> 1) & 0x55555555; | 47 | 2.46M | v = (v & 0x33333333) + ((v >> 2) & 0x33333333); | 48 | 2.46M | v = (v + (v >> 4)) & 0x0f0f0f0f; | 49 | 2.46M | if constexpr (BITS > 8) v += v >> 8; | 50 | 2.46M | if constexpr (BITS > 16) v += v >> 16; | 51 | 2.46M | return v & 0x3f; | 52 | | } else { | 53 | | static_assert(BITS <= 64); | 54 | | v -= (v >> 1) & 0x5555555555555555; | 55 | | v = (v & 0x3333333333333333) + ((v >> 2) & 0x3333333333333333); | 56 | | v = (v + (v >> 4)) & 0x0f0f0f0f0f0f0f0f; | 57 | | return (v * uint64_t{0x0101010101010101}) >> 56; | 58 | | } | 59 | 2.46M | } |
_ZN13bitset_detail8PopCountImEEjT_ Line | Count | Source | 40 | 126M | { | 41 | 126M | static_assert(std::is_integral_v<I> && std::is_unsigned_v<I> && std::numeric_limits<I>::radix == 2); | 42 | 126M | constexpr auto BITS = std::numeric_limits<I>::digits; | 43 | | // Algorithms from https://en.wikipedia.org/wiki/Hamming_weight#Efficient_implementation. | 44 | | // These seem to be faster than std::popcount when compiling for non-SSE4 on x86_64. | 45 | | if constexpr (BITS <= 32) { | 46 | | v -= (v >> 1) & 0x55555555; | 47 | | v = (v & 0x33333333) + ((v >> 2) & 0x33333333); | 48 | | v = (v + (v >> 4)) & 0x0f0f0f0f; | 49 | | if constexpr (BITS > 8) v += v >> 8; | 50 | | if constexpr (BITS > 16) v += v >> 16; | 51 | | return v & 0x3f; | 52 | 126M | } else { | 53 | 126M | static_assert(BITS <= 64); | 54 | 126M | v -= (v >> 1) & 0x5555555555555555; | 55 | 126M | v = (v & 0x3333333333333333) + ((v >> 2) & 0x3333333333333333); | 56 | 126M | v = (v + (v >> 4)) & 0x0f0f0f0f0f0f0f0f; | 57 | 126M | return (v * uint64_t{0x0101010101010101}) >> 56; | 58 | 126M | } | 59 | 126M | } |
|
60 | | |
61 | | /** A bitset implementation backed by a single integer of type I. */ |
62 | | template<typename I> |
63 | | class IntBitSet |
64 | | { |
65 | | // Only binary, unsigned, integer, types allowed. |
66 | | static_assert(std::is_integral_v<I> && std::is_unsigned_v<I> && std::numeric_limits<I>::radix == 2); |
67 | | /** The maximum number of bits this bitset supports. */ |
68 | | static constexpr unsigned MAX_SIZE = std::numeric_limits<I>::digits; |
69 | | /** Integer whose bits represent this bitset. */ |
70 | | I m_val; |
71 | | /** Internal constructor with a given integer as contents. */ |
72 | 280M | IntBitSet(I val) noexcept : m_val{val} {}_ZN13bitset_detail9IntBitSetItEC2Et Line | Count | Source | 72 | 7.99k | IntBitSet(I val) noexcept : m_val{val} {} |
_ZN13bitset_detail9IntBitSetIjEC2Ej Line | Count | Source | 72 | 175M | IntBitSet(I val) noexcept : m_val{val} {} |
_ZN13bitset_detail9IntBitSetImEC2Em Line | Count | Source | 72 | 105M | IntBitSet(I val) noexcept : m_val{val} {} |
|
73 | | /** Dummy type to return using end(). Only used for comparing with Iterator. */ |
74 | | class IteratorEnd |
75 | | { |
76 | | friend class IntBitSet; |
77 | | constexpr IteratorEnd() = default; |
78 | | public: |
79 | | constexpr IteratorEnd(const IteratorEnd&) = default; |
80 | | }; |
81 | | /** Iterator type returned by begin(), which efficiently iterates all 1 positions. */ |
82 | | class Iterator |
83 | | { |
84 | | friend class IntBitSet; |
85 | | I m_val; /**< The original integer's remaining bits. */ |
86 | | unsigned m_pos; /** Last reported 1 position (if m_pos != 0). */ |
87 | 333M | constexpr Iterator(I val) noexcept : m_val(val), m_pos(0) |
88 | 333M | { |
89 | 333M | if (m_val != 0) m_pos = std::countr_zero(m_val); Branch (89:17): [True: 49.1k, False: 12.4k]
Branch (89:17): [True: 101M, False: 27.5M]
Branch (89:17): [True: 141M, False: 62.5M]
|
90 | 333M | } _ZN13bitset_detail9IntBitSetItE8IteratorC2Et Line | Count | Source | 87 | 61.5k | constexpr Iterator(I val) noexcept : m_val(val), m_pos(0) | 88 | 61.5k | { | 89 | 61.5k | if (m_val != 0) m_pos = std::countr_zero(m_val); Branch (89:17): [True: 49.1k, False: 12.4k]
| 90 | 61.5k | } |
_ZN13bitset_detail9IntBitSetIjE8IteratorC2Ej Line | Count | Source | 87 | 129M | constexpr Iterator(I val) noexcept : m_val(val), m_pos(0) | 88 | 129M | { | 89 | 129M | if (m_val != 0) m_pos = std::countr_zero(m_val); Branch (89:17): [True: 101M, False: 27.5M]
| 90 | 129M | } |
_ZN13bitset_detail9IntBitSetImE8IteratorC2Em Line | Count | Source | 87 | 204M | constexpr Iterator(I val) noexcept : m_val(val), m_pos(0) | 88 | 204M | { | 89 | 204M | if (m_val != 0) m_pos = std::countr_zero(m_val); Branch (89:17): [True: 141M, False: 62.5M]
| 90 | 204M | } |
|
91 | | public: |
92 | | /** Do not allow external code to construct an Iterator. */ |
93 | | Iterator() = delete; |
94 | | // Copying is allowed. |
95 | | constexpr Iterator(const Iterator&) noexcept = default; |
96 | | constexpr Iterator& operator=(const Iterator&) noexcept = default; |
97 | | /** Test whether we are done (can only compare with IteratorEnd). */ |
98 | | constexpr friend bool operator==(const Iterator& a, const IteratorEnd&) noexcept |
99 | 1.44G | { |
100 | 1.44G | return a.m_val == 0; |
101 | 1.44G | } _ZN13bitset_detaileqERKNS_9IntBitSetItE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 99 | 2.84M | { | 100 | 2.84M | return a.m_val == 0; | 101 | 2.84M | } |
_ZN13bitset_detaileqERKNS_9IntBitSetIjE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 99 | 924M | { | 100 | 924M | return a.m_val == 0; | 101 | 924M | } |
_ZN13bitset_detaileqERKNS_9IntBitSetImE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 99 | 521M | { | 100 | 521M | return a.m_val == 0; | 101 | 521M | } |
|
102 | | /** Progress to the next 1 bit (only if != IteratorEnd). */ |
103 | | constexpr Iterator& operator++() noexcept |
104 | 1.11G | { |
105 | 1.11G | Assume(m_val != 0); |
106 | 1.11G | m_val &= m_val - I{1U}; |
107 | 1.11G | if (m_val != 0) m_pos = std::countr_zero(m_val); Branch (107:17): [True: 223k, False: 52.5k]
Branch (107:17): [True: 730M, False: 60.4M]
Branch (107:17): [True: 194M, False: 125M]
|
108 | 1.11G | return *this; |
109 | 1.11G | } _ZN13bitset_detail9IntBitSetItE8IteratorppEv Line | Count | Source | 104 | 276k | { | 105 | 276k | Assume(m_val != 0); | 106 | 276k | m_val &= m_val - I{1U}; | 107 | 276k | if (m_val != 0) m_pos = std::countr_zero(m_val); Branch (107:17): [True: 223k, False: 52.5k]
| 108 | 276k | return *this; | 109 | 276k | } |
_ZN13bitset_detail9IntBitSetIjE8IteratorppEv Line | Count | Source | 104 | 791M | { | 105 | 791M | Assume(m_val != 0); | 106 | 791M | m_val &= m_val - I{1U}; | 107 | 791M | if (m_val != 0) m_pos = std::countr_zero(m_val); Branch (107:17): [True: 730M, False: 60.4M]
| 108 | 791M | return *this; | 109 | 791M | } |
_ZN13bitset_detail9IntBitSetImE8IteratorppEv Line | Count | Source | 104 | 320M | { | 105 | 320M | Assume(m_val != 0); | 106 | 320M | m_val &= m_val - I{1U}; | 107 | 320M | if (m_val != 0) m_pos = std::countr_zero(m_val); Branch (107:17): [True: 194M, False: 125M]
| 108 | 320M | return *this; | 109 | 320M | } |
|
110 | | /** Get the current bit position (only if != IteratorEnd). */ |
111 | | constexpr unsigned operator*() const noexcept |
112 | 1.17G | { |
113 | 1.17G | Assume(m_val != 0); |
114 | 1.17G | return m_pos; |
115 | 1.17G | } _ZNK13bitset_detail9IntBitSetItE8IteratordeEv Line | Count | Source | 112 | 609k | { | 113 | 609k | Assume(m_val != 0); | 114 | 609k | return m_pos; | 115 | 609k | } |
_ZNK13bitset_detail9IntBitSetIjE8IteratordeEv Line | Count | Source | 112 | 833M | { | 113 | 833M | Assume(m_val != 0); | 114 | 833M | return m_pos; | 115 | 833M | } |
_ZNK13bitset_detail9IntBitSetImE8IteratordeEv Line | Count | Source | 112 | 339M | { | 113 | 339M | Assume(m_val != 0); | 114 | 339M | return m_pos; | 115 | 339M | } |
|
116 | | }; |
117 | | |
118 | | public: |
119 | | /** Construct an all-zero bitset. */ |
120 | 126M | constexpr IntBitSet() noexcept : m_val{0} {}_ZN13bitset_detail9IntBitSetItEC2Ev Line | Count | Source | 120 | 16.4k | constexpr IntBitSet() noexcept : m_val{0} {} |
_ZN13bitset_detail9IntBitSetIjEC2Ev Line | Count | Source | 120 | 3.47M | constexpr IntBitSet() noexcept : m_val{0} {} |
_ZN13bitset_detail9IntBitSetImEC2Ev Line | Count | Source | 120 | 123M | constexpr IntBitSet() noexcept : m_val{0} {} |
|
121 | | /** Copy construct a bitset. */ |
122 | | constexpr IntBitSet(const IntBitSet&) noexcept = default; |
123 | | /** Construct from a list of values. */ |
124 | 10.6k | constexpr IntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val(0) |
125 | 10.6k | { |
126 | 21.2k | for (auto pos : ilist) Set(pos); Branch (126:23): [True: 6.98k, False: 3.49k]
Branch (126:23): [True: 8.62k, False: 4.31k]
Branch (126:23): [True: 5.68k, False: 2.84k]
|
127 | 10.6k | } _ZN13bitset_detail9IntBitSetItEC2ESt16initializer_listIjE Line | Count | Source | 124 | 3.49k | constexpr IntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val(0) | 125 | 3.49k | { | 126 | 6.98k | for (auto pos : ilist) Set(pos); Branch (126:23): [True: 6.98k, False: 3.49k]
| 127 | 3.49k | } |
_ZN13bitset_detail9IntBitSetIjEC2ESt16initializer_listIjE Line | Count | Source | 124 | 4.31k | constexpr IntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val(0) | 125 | 4.31k | { | 126 | 8.62k | for (auto pos : ilist) Set(pos); Branch (126:23): [True: 8.62k, False: 4.31k]
| 127 | 4.31k | } |
_ZN13bitset_detail9IntBitSetImEC2ESt16initializer_listIjE Line | Count | Source | 124 | 2.84k | constexpr IntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val(0) | 125 | 2.84k | { | 126 | 5.68k | for (auto pos : ilist) Set(pos); Branch (126:23): [True: 5.68k, False: 2.84k]
| 127 | 2.84k | } |
|
128 | | /** Copy assign a bitset. */ |
129 | | constexpr IntBitSet& operator=(const IntBitSet&) noexcept = default; |
130 | | /** Assign from a list of positions (which will be made true, all others false). */ |
131 | | constexpr IntBitSet& operator=(std::initializer_list<unsigned> ilist) noexcept |
132 | 22.9k | { |
133 | 22.9k | m_val = 0; |
134 | 67.5k | for (auto pos : ilist) Set(pos); Branch (134:23): [True: 35.2k, False: 11.7k]
Branch (134:23): [True: 15.7k, False: 5.73k]
Branch (134:23): [True: 16.5k, False: 5.52k]
|
135 | 22.9k | return *this; |
136 | 22.9k | } _ZN13bitset_detail9IntBitSetItEaSESt16initializer_listIjE Line | Count | Source | 132 | 11.7k | { | 133 | 11.7k | m_val = 0; | 134 | 35.2k | for (auto pos : ilist) Set(pos); Branch (134:23): [True: 35.2k, False: 11.7k]
| 135 | 11.7k | return *this; | 136 | 11.7k | } |
_ZN13bitset_detail9IntBitSetIjEaSESt16initializer_listIjE Line | Count | Source | 132 | 5.73k | { | 133 | 5.73k | m_val = 0; | 134 | 15.7k | for (auto pos : ilist) Set(pos); Branch (134:23): [True: 15.7k, False: 5.73k]
| 135 | 5.73k | return *this; | 136 | 5.73k | } |
_ZN13bitset_detail9IntBitSetImEaSESt16initializer_listIjE Line | Count | Source | 132 | 5.52k | { | 133 | 5.52k | m_val = 0; | 134 | 16.5k | for (auto pos : ilist) Set(pos); Branch (134:23): [True: 16.5k, False: 5.52k]
| 135 | 5.52k | return *this; | 136 | 5.52k | } |
|
137 | | /** Construct a bitset with the singleton i. */ |
138 | | static constexpr IntBitSet Singleton(unsigned i) noexcept |
139 | 54.8M | { |
140 | 54.8M | Assume(i < MAX_SIZE); |
141 | 54.8M | return IntBitSet(I(1U) << i); |
142 | 54.8M | } _ZN13bitset_detail9IntBitSetItE9SingletonEj Line | Count | Source | 139 | 1.11k | { | 140 | 1.11k | Assume(i < MAX_SIZE); | 141 | 1.11k | return IntBitSet(I(1U) << i); | 142 | 1.11k | } |
_ZN13bitset_detail9IntBitSetIjE9SingletonEj Line | Count | Source | 139 | 5.16M | { | 140 | 5.16M | Assume(i < MAX_SIZE); | 141 | 5.16M | return IntBitSet(I(1U) << i); | 142 | 5.16M | } |
_ZN13bitset_detail9IntBitSetImE9SingletonEj Line | Count | Source | 139 | 49.6M | { | 140 | 49.6M | Assume(i < MAX_SIZE); | 141 | 49.6M | return IntBitSet(I(1U) << i); | 142 | 49.6M | } |
|
143 | | /** Construct a bitset with bits 0..count-1 (inclusive) set to 1. */ |
144 | | static constexpr IntBitSet Fill(unsigned count) noexcept |
145 | 2.28M | { |
146 | 2.28M | IntBitSet ret; |
147 | 2.28M | Assume(count <= MAX_SIZE); |
148 | 2.28M | if (count) ret.m_val = I(~I{0}) >> (MAX_SIZE - count); Branch (148:13): [True: 6.26k, False: 991]
Branch (148:13): [True: 81.0k, False: 2.27k]
Branch (148:13): [True: 2.19M, False: 678]
|
149 | 2.28M | return ret; |
150 | 2.28M | } _ZN13bitset_detail9IntBitSetItE4FillEj Line | Count | Source | 145 | 7.25k | { | 146 | 7.25k | IntBitSet ret; | 147 | 7.25k | Assume(count <= MAX_SIZE); | 148 | 7.25k | if (count) ret.m_val = I(~I{0}) >> (MAX_SIZE - count); Branch (148:13): [True: 6.26k, False: 991]
| 149 | 7.25k | return ret; | 150 | 7.25k | } |
_ZN13bitset_detail9IntBitSetIjE4FillEj Line | Count | Source | 145 | 83.3k | { | 146 | 83.3k | IntBitSet ret; | 147 | 83.3k | Assume(count <= MAX_SIZE); | 148 | 83.3k | if (count) ret.m_val = I(~I{0}) >> (MAX_SIZE - count); Branch (148:13): [True: 81.0k, False: 2.27k]
| 149 | 83.3k | return ret; | 150 | 83.3k | } |
_ZN13bitset_detail9IntBitSetImE4FillEj Line | Count | Source | 145 | 2.19M | { | 146 | 2.19M | IntBitSet ret; | 147 | 2.19M | Assume(count <= MAX_SIZE); | 148 | 2.19M | if (count) ret.m_val = I(~I{0}) >> (MAX_SIZE - count); Branch (148:13): [True: 2.19M, False: 678]
| 149 | 2.19M | return ret; | 150 | 2.19M | } |
|
151 | | /** Set a bit to 1. */ |
152 | | constexpr void Set(unsigned pos) noexcept |
153 | 70.2M | { |
154 | 70.2M | Assume(pos < MAX_SIZE); |
155 | 70.2M | m_val |= I{1U} << pos; |
156 | 70.2M | } _ZN13bitset_detail9IntBitSetItE3SetEj Line | Count | Source | 153 | 108k | { | 154 | 108k | Assume(pos < MAX_SIZE); | 155 | 108k | m_val |= I{1U} << pos; | 156 | 108k | } |
_ZN13bitset_detail9IntBitSetIjE3SetEj Line | Count | Source | 153 | 12.6M | { | 154 | 12.6M | Assume(pos < MAX_SIZE); | 155 | 12.6M | m_val |= I{1U} << pos; | 156 | 12.6M | } |
_ZN13bitset_detail9IntBitSetImE3SetEj Line | Count | Source | 153 | 57.4M | { | 154 | 57.4M | Assume(pos < MAX_SIZE); | 155 | 57.4M | m_val |= I{1U} << pos; | 156 | 57.4M | } |
|
157 | | /** Set a bit to the specified value. */ |
158 | | constexpr void Set(unsigned pos, bool val) noexcept |
159 | 7.37k | { |
160 | 7.37k | Assume(pos < MAX_SIZE); |
161 | 7.37k | m_val = (m_val & ~I(I{1U} << pos)) | (I(val) << pos); |
162 | 7.37k | } _ZN13bitset_detail9IntBitSetItE3SetEjb Line | Count | Source | 159 | 2.06k | { | 160 | 2.06k | Assume(pos < MAX_SIZE); | 161 | 2.06k | m_val = (m_val & ~I(I{1U} << pos)) | (I(val) << pos); | 162 | 2.06k | } |
_ZN13bitset_detail9IntBitSetIjE3SetEjb Line | Count | Source | 159 | 2.24k | { | 160 | 2.24k | Assume(pos < MAX_SIZE); | 161 | 2.24k | m_val = (m_val & ~I(I{1U} << pos)) | (I(val) << pos); | 162 | 2.24k | } |
_ZN13bitset_detail9IntBitSetImE3SetEjb Line | Count | Source | 159 | 3.06k | { | 160 | 3.06k | Assume(pos < MAX_SIZE); | 161 | 3.06k | m_val = (m_val & ~I(I{1U} << pos)) | (I(val) << pos); | 162 | 3.06k | } |
|
163 | | /** Set a bit to 0. */ |
164 | | constexpr void Reset(unsigned pos) noexcept |
165 | 37.9M | { |
166 | 37.9M | Assume(pos < MAX_SIZE); |
167 | 37.9M | m_val &= ~I(I{1U} << pos); |
168 | 37.9M | } _ZN13bitset_detail9IntBitSetItE5ResetEj Line | Count | Source | 165 | 2.75k | { | 166 | 2.75k | Assume(pos < MAX_SIZE); | 167 | 2.75k | m_val &= ~I(I{1U} << pos); | 168 | 2.75k | } |
_ZN13bitset_detail9IntBitSetIjE5ResetEj Line | Count | Source | 165 | 1.75M | { | 166 | 1.75M | Assume(pos < MAX_SIZE); | 167 | 1.75M | m_val &= ~I(I{1U} << pos); | 168 | 1.75M | } |
_ZN13bitset_detail9IntBitSetImE5ResetEj Line | Count | Source | 165 | 36.1M | { | 166 | 36.1M | Assume(pos < MAX_SIZE); | 167 | 36.1M | m_val &= ~I(I{1U} << pos); | 168 | 36.1M | } |
|
169 | | /** Retrieve a bit at the given position. */ |
170 | | constexpr bool operator[](unsigned pos) const noexcept |
171 | 208M | { |
172 | 208M | Assume(pos < MAX_SIZE); |
173 | 208M | return (m_val >> pos) & 1U; |
174 | 208M | } _ZNK13bitset_detail9IntBitSetItEixEj Line | Count | Source | 171 | 1.70M | { | 172 | 1.70M | Assume(pos < MAX_SIZE); | 173 | 1.70M | return (m_val >> pos) & 1U; | 174 | 1.70M | } |
_ZNK13bitset_detail9IntBitSetIjEixEj Line | Count | Source | 171 | 18.7M | { | 172 | 18.7M | Assume(pos < MAX_SIZE); | 173 | 18.7M | return (m_val >> pos) & 1U; | 174 | 18.7M | } |
_ZNK13bitset_detail9IntBitSetImEixEj Line | Count | Source | 171 | 188M | { | 172 | 188M | Assume(pos < MAX_SIZE); | 173 | 188M | return (m_val >> pos) & 1U; | 174 | 188M | } |
|
175 | | /** Compute the number of 1 bits in the bitset. */ |
176 | 101M | constexpr unsigned Count() const noexcept { return PopCount(m_val); }_ZNK13bitset_detail9IntBitSetItE5CountEv Line | Count | Source | 176 | 52.9k | constexpr unsigned Count() const noexcept { return PopCount(m_val); } |
_ZNK13bitset_detail9IntBitSetIjE5CountEv Line | Count | Source | 176 | 1.99M | constexpr unsigned Count() const noexcept { return PopCount(m_val); } |
_ZNK13bitset_detail9IntBitSetImE5CountEv Line | Count | Source | 176 | 99.2M | constexpr unsigned Count() const noexcept { return PopCount(m_val); } |
|
177 | | /** Return the number of bits that this object holds. */ |
178 | 11.0M | static constexpr unsigned Size() noexcept { return MAX_SIZE; }_ZN13bitset_detail9IntBitSetItE4SizeEv Line | Count | Source | 178 | 1.62M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail9IntBitSetIjE4SizeEv Line | Count | Source | 178 | 3.95M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail9IntBitSetImE4SizeEv Line | Count | Source | 178 | 5.43M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
|
179 | | /** Check if all bits are 0. */ |
180 | 154M | constexpr bool None() const noexcept { return m_val == 0; }_ZNK13bitset_detail9IntBitSetItE4NoneEv Line | Count | Source | 180 | 105k | constexpr bool None() const noexcept { return m_val == 0; } |
_ZNK13bitset_detail9IntBitSetIjE4NoneEv Line | Count | Source | 180 | 83.3M | constexpr bool None() const noexcept { return m_val == 0; } |
_ZNK13bitset_detail9IntBitSetImE4NoneEv Line | Count | Source | 180 | 71.1M | constexpr bool None() const noexcept { return m_val == 0; } |
|
181 | | /** Check if any bits are 1. */ |
182 | 57.3M | constexpr bool Any() const noexcept { return !None(); }_ZNK13bitset_detail9IntBitSetItE3AnyEv Line | Count | Source | 182 | 52.9k | constexpr bool Any() const noexcept { return !None(); } |
_ZNK13bitset_detail9IntBitSetIjE3AnyEv Line | Count | Source | 182 | 1.32M | constexpr bool Any() const noexcept { return !None(); } |
_ZNK13bitset_detail9IntBitSetImE3AnyEv Line | Count | Source | 182 | 55.9M | constexpr bool Any() const noexcept { return !None(); } |
|
183 | | /** Return an object that iterates over all 1 bits (++ and * only allowed when != end()). */ |
184 | 333M | constexpr Iterator begin() const noexcept { return Iterator(m_val); }_ZNK13bitset_detail9IntBitSetItE5beginEv Line | Count | Source | 184 | 61.5k | constexpr Iterator begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail9IntBitSetIjE5beginEv Line | Count | Source | 184 | 129M | constexpr Iterator begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail9IntBitSetImE5beginEv Line | Count | Source | 184 | 204M | constexpr Iterator begin() const noexcept { return Iterator(m_val); } |
|
185 | | /** Return a dummy object to compare Iterators with. */ |
186 | 358M | constexpr IteratorEnd end() const noexcept { return IteratorEnd(); }_ZNK13bitset_detail9IntBitSetItE3endEv Line | Count | Source | 186 | 2.84M | constexpr IteratorEnd end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail9IntBitSetIjE3endEv Line | Count | Source | 186 | 134M | constexpr IteratorEnd end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail9IntBitSetImE3endEv Line | Count | Source | 186 | 221M | constexpr IteratorEnd end() const noexcept { return IteratorEnd(); } |
|
187 | | /** Find the first element (requires Any()). */ |
188 | | constexpr unsigned First() const noexcept |
189 | 32.4M | { |
190 | 32.4M | Assume(m_val != 0); |
191 | 32.4M | return std::countr_zero(m_val); |
192 | 32.4M | } _ZNK13bitset_detail9IntBitSetItE5FirstEv Line | Count | Source | 189 | 43.0k | { | 190 | 43.0k | Assume(m_val != 0); | 191 | 43.0k | return std::countr_zero(m_val); | 192 | 43.0k | } |
_ZNK13bitset_detail9IntBitSetIjE5FirstEv Line | Count | Source | 189 | 583k | { | 190 | 583k | Assume(m_val != 0); | 191 | 583k | return std::countr_zero(m_val); | 192 | 583k | } |
_ZNK13bitset_detail9IntBitSetImE5FirstEv Line | Count | Source | 189 | 31.8M | { | 190 | 31.8M | Assume(m_val != 0); | 191 | 31.8M | return std::countr_zero(m_val); | 192 | 31.8M | } |
|
193 | | /** Find the last element (requires Any()). */ |
194 | | constexpr unsigned Last() const noexcept |
195 | 168k | { |
196 | 168k | Assume(m_val != 0); |
197 | 168k | return std::bit_width(m_val) - 1; |
198 | 168k | } _ZNK13bitset_detail9IntBitSetItE4LastEv Line | Count | Source | 195 | 43.0k | { | 196 | 43.0k | Assume(m_val != 0); | 197 | 43.0k | return std::bit_width(m_val) - 1; | 198 | 43.0k | } |
_ZNK13bitset_detail9IntBitSetIjE4LastEv Line | Count | Source | 195 | 85.3k | { | 196 | 85.3k | Assume(m_val != 0); | 197 | 85.3k | return std::bit_width(m_val) - 1; | 198 | 85.3k | } |
_ZNK13bitset_detail9IntBitSetImE4LastEv Line | Count | Source | 195 | 40.0k | { | 196 | 40.0k | Assume(m_val != 0); | 197 | 40.0k | return std::bit_width(m_val) - 1; | 198 | 40.0k | } |
|
199 | | /** Set this object's bits to be the binary AND between respective bits from this and a. */ |
200 | 100M | constexpr IntBitSet& operator|=(const IntBitSet& a) noexcept { m_val |= a.m_val; return *this; }_ZN13bitset_detail9IntBitSetItEoRERKS1_ Line | Count | Source | 200 | 2.71k | constexpr IntBitSet& operator|=(const IntBitSet& a) noexcept { m_val |= a.m_val; return *this; } |
_ZN13bitset_detail9IntBitSetIjEoRERKS1_ Line | Count | Source | 200 | 7.79M | constexpr IntBitSet& operator|=(const IntBitSet& a) noexcept { m_val |= a.m_val; return *this; } |
_ZN13bitset_detail9IntBitSetImEoRERKS1_ Line | Count | Source | 200 | 92.8M | constexpr IntBitSet& operator|=(const IntBitSet& a) noexcept { m_val |= a.m_val; return *this; } |
|
201 | | /** Set this object's bits to be the binary OR between respective bits from this and a. */ |
202 | 5.69M | constexpr IntBitSet& operator&=(const IntBitSet& a) noexcept { m_val &= a.m_val; return *this; }_ZN13bitset_detail9IntBitSetItEaNERKS1_ Line | Count | Source | 202 | 3.29k | constexpr IntBitSet& operator&=(const IntBitSet& a) noexcept { m_val &= a.m_val; return *this; } |
_ZN13bitset_detail9IntBitSetIjEaNERKS1_ Line | Count | Source | 202 | 628k | constexpr IntBitSet& operator&=(const IntBitSet& a) noexcept { m_val &= a.m_val; return *this; } |
_ZN13bitset_detail9IntBitSetImEaNERKS1_ Line | Count | Source | 202 | 5.06M | constexpr IntBitSet& operator&=(const IntBitSet& a) noexcept { m_val &= a.m_val; return *this; } |
|
203 | | /** Set this object's bits to be the binary AND NOT between respective bits from this and a. */ |
204 | 74.1M | constexpr IntBitSet& operator-=(const IntBitSet& a) noexcept { m_val &= ~a.m_val; return *this; }_ZN13bitset_detail9IntBitSetItEmIERKS1_ Line | Count | Source | 204 | 2.20k | constexpr IntBitSet& operator-=(const IntBitSet& a) noexcept { m_val &= ~a.m_val; return *this; } |
_ZN13bitset_detail9IntBitSetIjEmIERKS1_ Line | Count | Source | 204 | 2.31M | constexpr IntBitSet& operator-=(const IntBitSet& a) noexcept { m_val &= ~a.m_val; return *this; } |
_ZN13bitset_detail9IntBitSetImEmIERKS1_ Line | Count | Source | 204 | 71.8M | constexpr IntBitSet& operator-=(const IntBitSet& a) noexcept { m_val &= ~a.m_val; return *this; } |
|
205 | | /** Set this object's bits to be the binary XOR between respective bits from this as a. */ |
206 | 5.57k | constexpr IntBitSet& operator^=(const IntBitSet& a) noexcept { m_val ^= a.m_val; return *this; }_ZN13bitset_detail9IntBitSetItEeOERKS1_ Line | Count | Source | 206 | 1.80k | constexpr IntBitSet& operator^=(const IntBitSet& a) noexcept { m_val ^= a.m_val; return *this; } |
_ZN13bitset_detail9IntBitSetIjEeOERKS1_ Line | Count | Source | 206 | 1.64k | constexpr IntBitSet& operator^=(const IntBitSet& a) noexcept { m_val ^= a.m_val; return *this; } |
_ZN13bitset_detail9IntBitSetImEeOERKS1_ Line | Count | Source | 206 | 2.12k | constexpr IntBitSet& operator^=(const IntBitSet& a) noexcept { m_val ^= a.m_val; return *this; } |
|
207 | | /** Check if the intersection between two sets is non-empty. */ |
208 | 141M | constexpr bool Overlaps(const IntBitSet& a) const noexcept { return m_val & a.m_val; }_ZNK13bitset_detail9IntBitSetItE8OverlapsERKS1_ Line | Count | Source | 208 | 3.35k | constexpr bool Overlaps(const IntBitSet& a) const noexcept { return m_val & a.m_val; } |
_ZNK13bitset_detail9IntBitSetIjE8OverlapsERKS1_ Line | Count | Source | 208 | 109M | constexpr bool Overlaps(const IntBitSet& a) const noexcept { return m_val & a.m_val; } |
_ZNK13bitset_detail9IntBitSetImE8OverlapsERKS1_ Line | Count | Source | 208 | 31.9M | constexpr bool Overlaps(const IntBitSet& a) const noexcept { return m_val & a.m_val; } |
|
209 | | /** Return an object with the binary AND between respective bits from a and b. */ |
210 | 77.1M | friend constexpr IntBitSet operator&(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val & b.m_val); }_ZN13bitset_detailanERKNS_9IntBitSetItEES3_ Line | Count | Source | 210 | 1.75k | friend constexpr IntBitSet operator&(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val & b.m_val); } |
_ZN13bitset_detailanERKNS_9IntBitSetIjEES3_ Line | Count | Source | 210 | 46.5M | friend constexpr IntBitSet operator&(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val & b.m_val); } |
_ZN13bitset_detailanERKNS_9IntBitSetImEES3_ Line | Count | Source | 210 | 30.6M | friend constexpr IntBitSet operator&(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val & b.m_val); } |
|
211 | | /** Return an object with the binary OR between respective bits from a and b. */ |
212 | 40.8M | friend constexpr IntBitSet operator|(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val | b.m_val); }_ZN13bitset_detailorERKNS_9IntBitSetItEES3_ Line | Count | Source | 212 | 2.45k | friend constexpr IntBitSet operator|(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val | b.m_val); } |
_ZN13bitset_detailorERKNS_9IntBitSetIjEES3_ Line | Count | Source | 212 | 40.8M | friend constexpr IntBitSet operator|(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val | b.m_val); } |
_ZN13bitset_detailorERKNS_9IntBitSetImEES3_ Line | Count | Source | 212 | 1.75k | friend constexpr IntBitSet operator|(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val | b.m_val); } |
|
213 | | /** Return an object with the binary AND NOT between respective bits from a and b. */ |
214 | 108M | friend constexpr IntBitSet operator-(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val & ~b.m_val); }_ZN13bitset_detailmiERKNS_9IntBitSetItEES3_ Line | Count | Source | 214 | 1.12k | friend constexpr IntBitSet operator-(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val & ~b.m_val); } |
_ZN13bitset_detailmiERKNS_9IntBitSetIjEES3_ Line | Count | Source | 214 | 82.7M | friend constexpr IntBitSet operator-(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val & ~b.m_val); } |
_ZN13bitset_detailmiERKNS_9IntBitSetImEES3_ Line | Count | Source | 214 | 25.3M | friend constexpr IntBitSet operator-(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val & ~b.m_val); } |
|
215 | | /** Return an object with the binary XOR between respective bits from a and b. */ |
216 | 5.64k | friend constexpr IntBitSet operator^(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val ^ b.m_val); }_ZN13bitset_detaileoERKNS_9IntBitSetItEES3_ Line | Count | Source | 216 | 1.54k | friend constexpr IntBitSet operator^(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val ^ b.m_val); } |
_ZN13bitset_detaileoERKNS_9IntBitSetIjEES3_ Line | Count | Source | 216 | 1.83k | friend constexpr IntBitSet operator^(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val ^ b.m_val); } |
_ZN13bitset_detaileoERKNS_9IntBitSetImEES3_ Line | Count | Source | 216 | 2.26k | friend constexpr IntBitSet operator^(const IntBitSet& a, const IntBitSet& b) noexcept { return I(a.m_val ^ b.m_val); } |
|
217 | | /** Check if bitset a and bitset b are identical. */ |
218 | 7.46M | friend constexpr bool operator==(const IntBitSet& a, const IntBitSet& b) noexcept = default; _ZN13bitset_detaileqERKNS_9IntBitSetItEES3_ Line | Count | Source | 218 | 3.79k | friend constexpr bool operator==(const IntBitSet& a, const IntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_9IntBitSetIjEES3_ Line | Count | Source | 218 | 5.26M | friend constexpr bool operator==(const IntBitSet& a, const IntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_9IntBitSetImEES3_ Line | Count | Source | 218 | 2.18M | friend constexpr bool operator==(const IntBitSet& a, const IntBitSet& b) noexcept = default; |
|
219 | | /** Check if bitset a is a superset of bitset b (= every 1 bit in b is also in a). */ |
220 | 1.71M | constexpr bool IsSupersetOf(const IntBitSet& a) const noexcept { return (a.m_val & ~m_val) == 0; }_ZNK13bitset_detail9IntBitSetItE12IsSupersetOfERKS1_ Line | Count | Source | 220 | 4.68k | constexpr bool IsSupersetOf(const IntBitSet& a) const noexcept { return (a.m_val & ~m_val) == 0; } |
_ZNK13bitset_detail9IntBitSetIjE12IsSupersetOfERKS1_ Line | Count | Source | 220 | 1.13M | constexpr bool IsSupersetOf(const IntBitSet& a) const noexcept { return (a.m_val & ~m_val) == 0; } |
_ZNK13bitset_detail9IntBitSetImE12IsSupersetOfERKS1_ Line | Count | Source | 220 | 579k | constexpr bool IsSupersetOf(const IntBitSet& a) const noexcept { return (a.m_val & ~m_val) == 0; } |
|
221 | | /** Check if bitset a is a subset of bitset b (= every 1 bit in a is also in b). */ |
222 | 18.3M | constexpr bool IsSubsetOf(const IntBitSet& a) const noexcept { return (m_val & ~a.m_val) == 0; }_ZNK13bitset_detail9IntBitSetItE10IsSubsetOfERKS1_ Line | Count | Source | 222 | 4.68k | constexpr bool IsSubsetOf(const IntBitSet& a) const noexcept { return (m_val & ~a.m_val) == 0; } |
_ZNK13bitset_detail9IntBitSetIjE10IsSubsetOfERKS1_ Line | Count | Source | 222 | 5.71M | constexpr bool IsSubsetOf(const IntBitSet& a) const noexcept { return (m_val & ~a.m_val) == 0; } |
_ZNK13bitset_detail9IntBitSetImE10IsSubsetOfERKS1_ Line | Count | Source | 222 | 12.5M | constexpr bool IsSubsetOf(const IntBitSet& a) const noexcept { return (m_val & ~a.m_val) == 0; } |
|
223 | | /** Swap two bitsets. */ |
224 | 5.76k | friend constexpr void swap(IntBitSet& a, IntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); }_ZN13bitset_detail4swapERNS_9IntBitSetItEES2_ Line | Count | Source | 224 | 2.02k | friend constexpr void swap(IntBitSet& a, IntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_9IntBitSetIjEES2_ Line | Count | Source | 224 | 1.80k | friend constexpr void swap(IntBitSet& a, IntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_9IntBitSetImEES2_ Line | Count | Source | 224 | 1.94k | friend constexpr void swap(IntBitSet& a, IntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
|
225 | | }; |
226 | | |
227 | | /** A bitset implementation backed by N integers of type I. */ |
228 | | template<typename I, unsigned N> |
229 | | class MultiIntBitSet |
230 | | { |
231 | | // Only binary, unsigned, integer, types allowed. |
232 | | static_assert(std::is_integral_v<I> && std::is_unsigned_v<I> && std::numeric_limits<I>::radix == 2); |
233 | | // Cannot be empty. |
234 | | static_assert(N > 0); |
235 | | /** The number of bits per integer. */ |
236 | | static constexpr unsigned LIMB_BITS = std::numeric_limits<I>::digits; |
237 | | /** Number of elements this set type supports. */ |
238 | | static constexpr unsigned MAX_SIZE = LIMB_BITS * N; |
239 | | // No overflow allowed here. |
240 | | static_assert(MAX_SIZE / LIMB_BITS == N); |
241 | | /** Array whose member integers store the bits of the set. */ |
242 | | std::array<I, N> m_val; |
243 | | /** Dummy type to return using end(). Only used for comparing with Iterator. */ |
244 | | class IteratorEnd |
245 | | { |
246 | | friend class MultiIntBitSet; |
247 | | constexpr IteratorEnd() = default; |
248 | | public: |
249 | | constexpr IteratorEnd(const IteratorEnd&) = default; |
250 | | }; |
251 | | /** Iterator type returned by begin(), which efficiently iterates all 1 positions. */ |
252 | | class Iterator |
253 | | { |
254 | | friend class MultiIntBitSet; |
255 | | const std::array<I, N>* m_ptr; /**< Pointer to array to fetch bits from. */ |
256 | | I m_val; /**< The remaining bits of (*m_ptr)[m_idx]. */ |
257 | | unsigned m_pos; /**< The last reported position. */ |
258 | | unsigned m_idx; /**< The index in *m_ptr currently being iterated over. */ |
259 | 38.7M | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) |
260 | 38.7M | { |
261 | 45.1M | do { |
262 | 45.1M | m_val = (*m_ptr)[m_idx]; |
263 | 45.1M | if (m_val) { Branch (263:21): [True: 49.1k, False: 12.4k]
Branch (263:21): [True: 44.2k, False: 26.8k]
Branch (263:21): [True: 36.7k, False: 43.5k]
Branch (263:21): [True: 48.4k, False: 10.8k]
Branch (263:21): [True: 48.4k, False: 28.0k]
Branch (263:21): [True: 48.4k, False: 64.2k]
Branch (263:21): [True: 38.1k, False: 44.2k]
Branch (263:21): [True: 37.2M, False: 7.00M]
Branch (263:21): [True: 59.1k, False: 80.6k]
Branch (263:21): [True: 54.4k, False: 51.4k]
Branch (263:21): [True: 52.0k, False: 76.3k]
|
264 | 37.7M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; |
265 | 37.7M | break; |
266 | 37.7M | } |
267 | 7.44M | ++m_idx; |
268 | 7.44M | } while(m_idx < N); Branch (268:21): [True: 0, False: 12.4k]
Branch (268:21): [True: 15.9k, False: 10.8k]
Branch (268:21): [True: 33.0k, False: 10.4k]
Branch (268:21): [True: 0, False: 10.8k]
Branch (268:21): [True: 17.2k, False: 10.8k]
Branch (268:21): [True: 53.3k, False: 10.8k]
Branch (268:21): [True: 33.4k, False: 10.7k]
Branch (268:21): [True: 6.05M, False: 954k]
Branch (268:21): [True: 67.3k, False: 13.2k]
Branch (268:21): [True: 39.6k, False: 11.7k]
Branch (268:21): [True: 64.2k, False: 12.1k]
|
269 | 38.7M | } _ZN13bitset_detail14MultiIntBitSetItLj1EE8IteratorC2ERKSt5arrayItLm1EE Line | Count | Source | 259 | 61.5k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 61.5k | { | 261 | 61.5k | do { | 262 | 61.5k | m_val = (*m_ptr)[m_idx]; | 263 | 61.5k | if (m_val) { Branch (263:21): [True: 49.1k, False: 12.4k]
| 264 | 49.1k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 49.1k | break; | 266 | 49.1k | } | 267 | 12.4k | ++m_idx; | 268 | 12.4k | } while(m_idx < N); Branch (268:21): [True: 0, False: 12.4k]
| 269 | 61.5k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EE8IteratorC2ERKSt5arrayItLm2EE Line | Count | Source | 259 | 55.0k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 55.0k | { | 261 | 71.0k | do { | 262 | 71.0k | m_val = (*m_ptr)[m_idx]; | 263 | 71.0k | if (m_val) { Branch (263:21): [True: 44.2k, False: 26.8k]
| 264 | 44.2k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 44.2k | break; | 266 | 44.2k | } | 267 | 26.8k | ++m_idx; | 268 | 26.8k | } while(m_idx < N); Branch (268:21): [True: 15.9k, False: 10.8k]
| 269 | 55.0k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EE8IteratorC2ERKSt5arrayItLm3EE Line | Count | Source | 259 | 47.2k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 47.2k | { | 261 | 80.3k | do { | 262 | 80.3k | m_val = (*m_ptr)[m_idx]; | 263 | 80.3k | if (m_val) { Branch (263:21): [True: 36.7k, False: 43.5k]
| 264 | 36.7k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 36.7k | break; | 266 | 36.7k | } | 267 | 43.5k | ++m_idx; | 268 | 43.5k | } while(m_idx < N); Branch (268:21): [True: 33.0k, False: 10.4k]
| 269 | 47.2k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EE8IteratorC2ERKSt5arrayImLm1EE Line | Count | Source | 259 | 59.3k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 59.3k | { | 261 | 59.3k | do { | 262 | 59.3k | m_val = (*m_ptr)[m_idx]; | 263 | 59.3k | if (m_val) { Branch (263:21): [True: 48.4k, False: 10.8k]
| 264 | 48.4k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 48.4k | break; | 266 | 48.4k | } | 267 | 10.8k | ++m_idx; | 268 | 10.8k | } while(m_idx < N); Branch (268:21): [True: 0, False: 10.8k]
| 269 | 59.3k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EE8IteratorC2ERKSt5arrayIjLm2EE Line | Count | Source | 259 | 59.3k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 59.3k | { | 261 | 76.5k | do { | 262 | 76.5k | m_val = (*m_ptr)[m_idx]; | 263 | 76.5k | if (m_val) { Branch (263:21): [True: 48.4k, False: 28.0k]
| 264 | 48.4k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 48.4k | break; | 266 | 48.4k | } | 267 | 28.0k | ++m_idx; | 268 | 28.0k | } while(m_idx < N); Branch (268:21): [True: 17.2k, False: 10.8k]
| 269 | 59.3k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EE8IteratorC2ERKSt5arrayItLm4EE Line | Count | Source | 259 | 59.3k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 59.3k | { | 261 | 112k | do { | 262 | 112k | m_val = (*m_ptr)[m_idx]; | 263 | 112k | if (m_val) { Branch (263:21): [True: 48.4k, False: 64.2k]
| 264 | 48.4k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 48.4k | break; | 266 | 48.4k | } | 267 | 64.2k | ++m_idx; | 268 | 64.2k | } while(m_idx < N); Branch (268:21): [True: 53.3k, False: 10.8k]
| 269 | 59.3k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EE8IteratorC2ERKSt5arrayIjLm3EE Line | Count | Source | 259 | 48.8k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 48.8k | { | 261 | 82.3k | do { | 262 | 82.3k | m_val = (*m_ptr)[m_idx]; | 263 | 82.3k | if (m_val) { Branch (263:21): [True: 38.1k, False: 44.2k]
| 264 | 38.1k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 38.1k | break; | 266 | 38.1k | } | 267 | 44.2k | ++m_idx; | 268 | 44.2k | } while(m_idx < N); Branch (268:21): [True: 33.4k, False: 10.7k]
| 269 | 48.8k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EE8IteratorC2ERKSt5arrayImLm2EE Line | Count | Source | 259 | 38.1M | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 38.1M | { | 261 | 44.2M | do { | 262 | 44.2M | m_val = (*m_ptr)[m_idx]; | 263 | 44.2M | if (m_val) { Branch (263:21): [True: 37.2M, False: 7.00M]
| 264 | 37.2M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 37.2M | break; | 266 | 37.2M | } | 267 | 7.00M | ++m_idx; | 268 | 7.00M | } while(m_idx < N); Branch (268:21): [True: 6.05M, False: 954k]
| 269 | 38.1M | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EE8IteratorC2ERKSt5arrayIjLm4EE Line | Count | Source | 259 | 72.3k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 72.3k | { | 261 | 139k | do { | 262 | 139k | m_val = (*m_ptr)[m_idx]; | 263 | 139k | if (m_val) { Branch (263:21): [True: 59.1k, False: 80.6k]
| 264 | 59.1k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 59.1k | break; | 266 | 59.1k | } | 267 | 80.6k | ++m_idx; | 268 | 80.6k | } while(m_idx < N); Branch (268:21): [True: 67.3k, False: 13.2k]
| 269 | 72.3k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EE8IteratorC2ERKSt5arrayImLm3EE Line | Count | Source | 259 | 66.1k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 66.1k | { | 261 | 105k | do { | 262 | 105k | m_val = (*m_ptr)[m_idx]; | 263 | 105k | if (m_val) { Branch (263:21): [True: 54.4k, False: 51.4k]
| 264 | 54.4k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 54.4k | break; | 266 | 54.4k | } | 267 | 51.4k | ++m_idx; | 268 | 51.4k | } while(m_idx < N); Branch (268:21): [True: 39.6k, False: 11.7k]
| 269 | 66.1k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EE8IteratorC2ERKSt5arrayImLm4EE Line | Count | Source | 259 | 64.1k | constexpr Iterator(const std::array<I, N>& ref) noexcept : m_ptr(&ref), m_idx(0) | 260 | 64.1k | { | 261 | 128k | do { | 262 | 128k | m_val = (*m_ptr)[m_idx]; | 263 | 128k | if (m_val) { Branch (263:21): [True: 52.0k, False: 76.3k]
| 264 | 52.0k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 265 | 52.0k | break; | 266 | 52.0k | } | 267 | 76.3k | ++m_idx; | 268 | 76.3k | } while(m_idx < N); Branch (268:21): [True: 64.2k, False: 12.1k]
| 269 | 64.1k | } |
|
270 | | |
271 | | public: |
272 | | /** Do not allow external code to construct an Iterator. */ |
273 | | Iterator() = delete; |
274 | | // Copying is allowed. |
275 | | constexpr Iterator(const Iterator&) noexcept = default; |
276 | | constexpr Iterator& operator=(const Iterator&) noexcept = default; |
277 | | /** Test whether we are done (can only compare with IteratorEnd). */ |
278 | | friend constexpr bool operator==(const Iterator& a, const IteratorEnd&) noexcept |
279 | 314M | { |
280 | 314M | return a.m_idx == N; |
281 | 314M | } _ZN13bitset_detaileqERKNS_14MultiIntBitSetItLj1EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 2.84M | { | 280 | 2.84M | return a.m_idx == N; | 281 | 2.84M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetItLj2EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 4.95M | { | 280 | 4.95M | return a.m_idx == N; | 281 | 4.95M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetItLj3EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 6.39M | { | 280 | 6.39M | return a.m_idx == N; | 281 | 6.39M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetImLj1EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 10.4M | { | 280 | 10.4M | return a.m_idx == N; | 281 | 10.4M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetIjLj2EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 10.4M | { | 280 | 10.4M | return a.m_idx == N; | 281 | 10.4M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetItLj4EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 10.4M | { | 280 | 10.4M | return a.m_idx == N; | 281 | 10.4M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetIjLj3EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 13.2M | { | 280 | 13.2M | return a.m_idx == N; | 281 | 13.2M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetImLj2EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 148M | { | 280 | 148M | return a.m_idx == N; | 281 | 148M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetIjLj4EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 25.7M | { | 280 | 25.7M | return a.m_idx == N; | 281 | 25.7M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetImLj3EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 36.0M | { | 280 | 36.0M | return a.m_idx == N; | 281 | 36.0M | } |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetImLj4EE8IteratorERKNS1_11IteratorEndE Line | Count | Source | 279 | 45.0M | { | 280 | 45.0M | return a.m_idx == N; | 281 | 45.0M | } |
|
282 | | /** Progress to the next 1 bit (only if != IteratorEnd). */ |
283 | | constexpr Iterator& operator++() noexcept |
284 | 99.0M | { |
285 | 99.0M | Assume(m_idx < N); |
286 | 99.0M | m_val &= m_val - I{1U}; |
287 | 99.0M | if (m_val == 0) { Branch (287:17): [True: 52.5k, False: 223k]
Branch (287:17): [True: 77.5k, False: 405k]
Branch (287:17): [True: 83.8k, False: 341k]
Branch (287:17): [True: 54.4k, False: 916k]
Branch (287:17): [True: 86.8k, False: 884k]
Branch (287:17): [True: 136k, False: 834k]
Branch (287:17): [True: 84.5k, False: 759k]
Branch (287:17): [True: 36.2M, False: 50.5M]
Branch (287:17): [True: 162k, False: 1.76M]
Branch (287:17): [True: 120k, False: 2.30M]
Branch (287:17): [True: 140k, False: 2.89M]
|
288 | 63.1M | while (true) { Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
Branch (288:24): [Folded - Ignored]
|
289 | 63.1M | ++m_idx; |
290 | 63.1M | if (m_idx == N) break; Branch (290:25): [True: 52.5k, False: 0]
Branch (290:25): [True: 47.8k, False: 41.1k]
Branch (290:25): [True: 42.0k, False: 67.6k]
Branch (290:25): [True: 54.4k, False: 0]
Branch (290:25): [True: 54.4k, False: 44.8k]
Branch (290:25): [True: 54.4k, False: 133k]
Branch (290:25): [True: 42.3k, False: 67.7k]
Branch (290:25): [True: 33.1M, False: 28.6M]
Branch (290:25): [True: 65.5k, False: 160k]
Branch (290:25): [True: 59.8k, False: 98.6k]
Branch (290:25): [True: 57.7k, False: 137k]
|
291 | 29.4M | m_val = (*m_ptr)[m_idx]; |
292 | 29.4M | if (m_val) { Branch (292:25): [True: 0, False: 0]
Branch (292:25): [True: 29.6k, False: 11.4k]
Branch (292:25): [True: 41.7k, False: 25.8k]
Branch (292:25): [True: 0, False: 0]
Branch (292:25): [True: 32.3k, False: 12.5k]
Branch (292:25): [True: 82.0k, False: 51.0k]
Branch (292:25): [True: 42.1k, False: 25.5k]
Branch (292:25): [True: 3.09M, False: 25.5M]
Branch (292:25): [True: 96.7k, False: 63.5k]
Branch (292:25): [True: 61.0k, False: 37.5k]
Branch (292:25): [True: 82.4k, False: 54.6k]
|
293 | 3.56M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; |
294 | 3.56M | break; |
295 | 3.56M | } |
296 | 29.4M | } |
297 | 61.8M | } else { |
298 | 61.8M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; |
299 | 61.8M | } |
300 | 99.0M | return *this; |
301 | 99.0M | } _ZN13bitset_detail14MultiIntBitSetItLj1EE8IteratorppEv Line | Count | Source | 284 | 276k | { | 285 | 276k | Assume(m_idx < N); | 286 | 276k | m_val &= m_val - I{1U}; | 287 | 276k | if (m_val == 0) { Branch (287:17): [True: 52.5k, False: 223k]
| 288 | 52.5k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 52.5k | ++m_idx; | 290 | 52.5k | if (m_idx == N) break; Branch (290:25): [True: 52.5k, False: 0]
| 291 | 0 | m_val = (*m_ptr)[m_idx]; | 292 | 0 | if (m_val) { Branch (292:25): [True: 0, False: 0]
| 293 | 0 | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 0 | break; | 295 | 0 | } | 296 | 0 | } | 297 | 223k | } else { | 298 | 223k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 223k | } | 300 | 276k | return *this; | 301 | 276k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EE8IteratorppEv Line | Count | Source | 284 | 482k | { | 285 | 482k | Assume(m_idx < N); | 286 | 482k | m_val &= m_val - I{1U}; | 287 | 482k | if (m_val == 0) { Branch (287:17): [True: 77.5k, False: 405k]
| 288 | 89.0k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 89.0k | ++m_idx; | 290 | 89.0k | if (m_idx == N) break; Branch (290:25): [True: 47.8k, False: 41.1k]
| 291 | 41.1k | m_val = (*m_ptr)[m_idx]; | 292 | 41.1k | if (m_val) { Branch (292:25): [True: 29.6k, False: 11.4k]
| 293 | 29.6k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 29.6k | break; | 295 | 29.6k | } | 296 | 41.1k | } | 297 | 405k | } else { | 298 | 405k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 405k | } | 300 | 482k | return *this; | 301 | 482k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EE8IteratorppEv Line | Count | Source | 284 | 425k | { | 285 | 425k | Assume(m_idx < N); | 286 | 425k | m_val &= m_val - I{1U}; | 287 | 425k | if (m_val == 0) { Branch (287:17): [True: 83.8k, False: 341k]
| 288 | 109k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 109k | ++m_idx; | 290 | 109k | if (m_idx == N) break; Branch (290:25): [True: 42.0k, False: 67.6k]
| 291 | 67.6k | m_val = (*m_ptr)[m_idx]; | 292 | 67.6k | if (m_val) { Branch (292:25): [True: 41.7k, False: 25.8k]
| 293 | 41.7k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 41.7k | break; | 295 | 41.7k | } | 296 | 67.6k | } | 297 | 341k | } else { | 298 | 341k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 341k | } | 300 | 425k | return *this; | 301 | 425k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EE8IteratorppEv Line | Count | Source | 284 | 971k | { | 285 | 971k | Assume(m_idx < N); | 286 | 971k | m_val &= m_val - I{1U}; | 287 | 971k | if (m_val == 0) { Branch (287:17): [True: 54.4k, False: 916k]
| 288 | 54.4k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 54.4k | ++m_idx; | 290 | 54.4k | if (m_idx == N) break; Branch (290:25): [True: 54.4k, False: 0]
| 291 | 0 | m_val = (*m_ptr)[m_idx]; | 292 | 0 | if (m_val) { Branch (292:25): [True: 0, False: 0]
| 293 | 0 | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 0 | break; | 295 | 0 | } | 296 | 0 | } | 297 | 916k | } else { | 298 | 916k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 916k | } | 300 | 971k | return *this; | 301 | 971k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EE8IteratorppEv Line | Count | Source | 284 | 971k | { | 285 | 971k | Assume(m_idx < N); | 286 | 971k | m_val &= m_val - I{1U}; | 287 | 971k | if (m_val == 0) { Branch (287:17): [True: 86.8k, False: 884k]
| 288 | 99.3k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 99.3k | ++m_idx; | 290 | 99.3k | if (m_idx == N) break; Branch (290:25): [True: 54.4k, False: 44.8k]
| 291 | 44.8k | m_val = (*m_ptr)[m_idx]; | 292 | 44.8k | if (m_val) { Branch (292:25): [True: 32.3k, False: 12.5k]
| 293 | 32.3k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 32.3k | break; | 295 | 32.3k | } | 296 | 44.8k | } | 297 | 884k | } else { | 298 | 884k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 884k | } | 300 | 971k | return *this; | 301 | 971k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EE8IteratorppEv Line | Count | Source | 284 | 971k | { | 285 | 971k | Assume(m_idx < N); | 286 | 971k | m_val &= m_val - I{1U}; | 287 | 971k | if (m_val == 0) { Branch (287:17): [True: 136k, False: 834k]
| 288 | 187k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 187k | ++m_idx; | 290 | 187k | if (m_idx == N) break; Branch (290:25): [True: 54.4k, False: 133k]
| 291 | 133k | m_val = (*m_ptr)[m_idx]; | 292 | 133k | if (m_val) { Branch (292:25): [True: 82.0k, False: 51.0k]
| 293 | 82.0k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 82.0k | break; | 295 | 82.0k | } | 296 | 133k | } | 297 | 834k | } else { | 298 | 834k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 834k | } | 300 | 971k | return *this; | 301 | 971k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EE8IteratorppEv Line | Count | Source | 284 | 844k | { | 285 | 844k | Assume(m_idx < N); | 286 | 844k | m_val &= m_val - I{1U}; | 287 | 844k | if (m_val == 0) { Branch (287:17): [True: 84.5k, False: 759k]
| 288 | 110k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 110k | ++m_idx; | 290 | 110k | if (m_idx == N) break; Branch (290:25): [True: 42.3k, False: 67.7k]
| 291 | 67.7k | m_val = (*m_ptr)[m_idx]; | 292 | 67.7k | if (m_val) { Branch (292:25): [True: 42.1k, False: 25.5k]
| 293 | 42.1k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 42.1k | break; | 295 | 42.1k | } | 296 | 67.7k | } | 297 | 759k | } else { | 298 | 759k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 759k | } | 300 | 844k | return *this; | 301 | 844k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EE8IteratorppEv Line | Count | Source | 284 | 86.7M | { | 285 | 86.7M | Assume(m_idx < N); | 286 | 86.7M | m_val &= m_val - I{1U}; | 287 | 86.7M | if (m_val == 0) { Branch (287:17): [True: 36.2M, False: 50.5M]
| 288 | 61.8M | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 61.8M | ++m_idx; | 290 | 61.8M | if (m_idx == N) break; Branch (290:25): [True: 33.1M, False: 28.6M]
| 291 | 28.6M | m_val = (*m_ptr)[m_idx]; | 292 | 28.6M | if (m_val) { Branch (292:25): [True: 3.09M, False: 25.5M]
| 293 | 3.09M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 3.09M | break; | 295 | 3.09M | } | 296 | 28.6M | } | 297 | 50.5M | } else { | 298 | 50.5M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 50.5M | } | 300 | 86.7M | return *this; | 301 | 86.7M | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EE8IteratorppEv Line | Count | Source | 284 | 1.93M | { | 285 | 1.93M | Assume(m_idx < N); | 286 | 1.93M | m_val &= m_val - I{1U}; | 287 | 1.93M | if (m_val == 0) { Branch (287:17): [True: 162k, False: 1.76M]
| 288 | 225k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 225k | ++m_idx; | 290 | 225k | if (m_idx == N) break; Branch (290:25): [True: 65.5k, False: 160k]
| 291 | 160k | m_val = (*m_ptr)[m_idx]; | 292 | 160k | if (m_val) { Branch (292:25): [True: 96.7k, False: 63.5k]
| 293 | 96.7k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 96.7k | break; | 295 | 96.7k | } | 296 | 160k | } | 297 | 1.76M | } else { | 298 | 1.76M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 1.76M | } | 300 | 1.93M | return *this; | 301 | 1.93M | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EE8IteratorppEv Line | Count | Source | 284 | 2.42M | { | 285 | 2.42M | Assume(m_idx < N); | 286 | 2.42M | m_val &= m_val - I{1U}; | 287 | 2.42M | if (m_val == 0) { Branch (287:17): [True: 120k, False: 2.30M]
| 288 | 158k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 158k | ++m_idx; | 290 | 158k | if (m_idx == N) break; Branch (290:25): [True: 59.8k, False: 98.6k]
| 291 | 98.6k | m_val = (*m_ptr)[m_idx]; | 292 | 98.6k | if (m_val) { Branch (292:25): [True: 61.0k, False: 37.5k]
| 293 | 61.0k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 61.0k | break; | 295 | 61.0k | } | 296 | 98.6k | } | 297 | 2.30M | } else { | 298 | 2.30M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 2.30M | } | 300 | 2.42M | return *this; | 301 | 2.42M | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EE8IteratorppEv Line | Count | Source | 284 | 3.03M | { | 285 | 3.03M | Assume(m_idx < N); | 286 | 3.03M | m_val &= m_val - I{1U}; | 287 | 3.03M | if (m_val == 0) { Branch (287:17): [True: 140k, False: 2.89M]
| 288 | 194k | while (true) { Branch (288:24): [Folded - Ignored]
| 289 | 194k | ++m_idx; | 290 | 194k | if (m_idx == N) break; Branch (290:25): [True: 57.7k, False: 137k]
| 291 | 137k | m_val = (*m_ptr)[m_idx]; | 292 | 137k | if (m_val) { Branch (292:25): [True: 82.4k, False: 54.6k]
| 293 | 82.4k | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 294 | 82.4k | break; | 295 | 82.4k | } | 296 | 137k | } | 297 | 2.89M | } else { | 298 | 2.89M | m_pos = std::countr_zero(m_val) + m_idx * LIMB_BITS; | 299 | 2.89M | } | 300 | 3.03M | return *this; | 301 | 3.03M | } |
|
302 | | /** Get the current bit position (only if != IteratorEnd). */ |
303 | | constexpr unsigned operator*() const noexcept |
304 | 131M | { |
305 | 131M | Assume(m_idx < N); |
306 | 131M | return m_pos; |
307 | 131M | } _ZNK13bitset_detail14MultiIntBitSetItLj1EE8IteratordeEv Line | Count | Source | 304 | 609k | { | 305 | 609k | Assume(m_idx < N); | 306 | 609k | return m_pos; | 307 | 609k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE8IteratordeEv Line | Count | Source | 304 | 1.07M | { | 305 | 1.07M | Assume(m_idx < N); | 306 | 1.07M | return m_pos; | 307 | 1.07M | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE8IteratordeEv Line | Count | Source | 304 | 1.37M | { | 305 | 1.37M | Assume(m_idx < N); | 306 | 1.37M | return m_pos; | 307 | 1.37M | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE8IteratordeEv Line | Count | Source | 304 | 2.41M | { | 305 | 2.41M | Assume(m_idx < N); | 306 | 2.41M | return m_pos; | 307 | 2.41M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE8IteratordeEv Line | Count | Source | 304 | 2.41M | { | 305 | 2.41M | Assume(m_idx < N); | 306 | 2.41M | return m_pos; | 307 | 2.41M | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE8IteratordeEv Line | Count | Source | 304 | 2.41M | { | 305 | 2.41M | Assume(m_idx < N); | 306 | 2.41M | return m_pos; | 307 | 2.41M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE8IteratordeEv Line | Count | Source | 304 | 2.73M | { | 305 | 2.73M | Assume(m_idx < N); | 306 | 2.73M | return m_pos; | 307 | 2.73M | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE8IteratordeEv Line | Count | Source | 304 | 94.7M | { | 305 | 94.7M | Assume(m_idx < N); | 306 | 94.7M | return m_pos; | 307 | 94.7M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE8IteratordeEv Line | Count | Source | 304 | 5.87M | { | 305 | 5.87M | Assume(m_idx < N); | 306 | 5.87M | return m_pos; | 307 | 5.87M | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE8IteratordeEv Line | Count | Source | 304 | 7.63M | { | 305 | 7.63M | Assume(m_idx < N); | 306 | 7.63M | return m_pos; | 307 | 7.63M | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE8IteratordeEv Line | Count | Source | 304 | 10.5M | { | 305 | 10.5M | Assume(m_idx < N); | 306 | 10.5M | return m_pos; | 307 | 10.5M | } |
|
308 | | }; |
309 | | |
310 | | public: |
311 | | /** Construct an all-zero bitset. */ |
312 | 64.3M | constexpr MultiIntBitSet() noexcept : m_val{} {}_ZN13bitset_detail14MultiIntBitSetItLj1EEC2Ev Line | Count | Source | 312 | 24.4k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetItLj2EEC2Ev Line | Count | Source | 312 | 25.3k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetItLj3EEC2Ev Line | Count | Source | 312 | 17.8k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetImLj1EEC2Ev Line | Count | Source | 312 | 25.1k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetIjLj2EEC2Ev Line | Count | Source | 312 | 25.1k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetItLj4EEC2Ev Line | Count | Source | 312 | 25.1k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetIjLj3EEC2Ev Line | Count | Source | 312 | 18.8k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetImLj2EEC2Ev Line | Count | Source | 312 | 64.0M | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetIjLj4EEC2Ev Line | Count | Source | 312 | 29.5k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetImLj3EEC2Ev Line | Count | Source | 312 | 28.8k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
_ZN13bitset_detail14MultiIntBitSetImLj4EEC2Ev Line | Count | Source | 312 | 24.8k | constexpr MultiIntBitSet() noexcept : m_val{} {} |
|
313 | | /** Copy construct a bitset. */ |
314 | | constexpr MultiIntBitSet(const MultiIntBitSet&) noexcept = default; |
315 | | /** Copy assign a bitset. */ |
316 | | constexpr MultiIntBitSet& operator=(const MultiIntBitSet&) noexcept = default; |
317 | | /** Set a bit to 1. */ |
318 | | void constexpr Set(unsigned pos) noexcept |
319 | 17.8M | { |
320 | 17.8M | Assume(pos < MAX_SIZE); |
321 | 17.8M | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); |
322 | 17.8M | } _ZN13bitset_detail14MultiIntBitSetItLj1EE3SetEj Line | Count | Source | 319 | 108k | { | 320 | 108k | Assume(pos < MAX_SIZE); | 321 | 108k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 108k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EE3SetEj Line | Count | Source | 319 | 129k | { | 320 | 129k | Assume(pos < MAX_SIZE); | 321 | 129k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 129k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EE3SetEj Line | Count | Source | 319 | 132k | { | 320 | 132k | Assume(pos < MAX_SIZE); | 321 | 132k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 132k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EE3SetEj Line | Count | Source | 319 | 214k | { | 320 | 214k | Assume(pos < MAX_SIZE); | 321 | 214k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 214k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EE3SetEj Line | Count | Source | 319 | 214k | { | 320 | 214k | Assume(pos < MAX_SIZE); | 321 | 214k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 214k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EE3SetEj Line | Count | Source | 319 | 214k | { | 320 | 214k | Assume(pos < MAX_SIZE); | 321 | 214k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 214k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EE3SetEj Line | Count | Source | 319 | 174k | { | 320 | 174k | Assume(pos < MAX_SIZE); | 321 | 174k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 174k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EE3SetEj Line | Count | Source | 319 | 14.5M | { | 320 | 14.5M | Assume(pos < MAX_SIZE); | 321 | 14.5M | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 14.5M | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EE3SetEj Line | Count | Source | 319 | 483k | { | 320 | 483k | Assume(pos < MAX_SIZE); | 321 | 483k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 483k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EE3SetEj Line | Count | Source | 319 | 691k | { | 320 | 691k | Assume(pos < MAX_SIZE); | 321 | 691k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 691k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EE3SetEj Line | Count | Source | 319 | 882k | { | 320 | 882k | Assume(pos < MAX_SIZE); | 321 | 882k | m_val[pos / LIMB_BITS] |= I{1U} << (pos % LIMB_BITS); | 322 | 882k | } |
|
323 | | /** Set a bit to the specified value. */ |
324 | | void constexpr Set(unsigned pos, bool val) noexcept |
325 | 33.3k | { |
326 | 33.3k | Assume(pos < MAX_SIZE); |
327 | 33.3k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | |
328 | 33.3k | (I{val} << (pos % LIMB_BITS)); |
329 | 33.3k | } _ZN13bitset_detail14MultiIntBitSetItLj1EE3SetEjb Line | Count | Source | 325 | 2.06k | { | 326 | 2.06k | Assume(pos < MAX_SIZE); | 327 | 2.06k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 2.06k | (I{val} << (pos % LIMB_BITS)); | 329 | 2.06k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EE3SetEjb Line | Count | Source | 325 | 2.24k | { | 326 | 2.24k | Assume(pos < MAX_SIZE); | 327 | 2.24k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 2.24k | (I{val} << (pos % LIMB_BITS)); | 329 | 2.24k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EE3SetEjb Line | Count | Source | 325 | 2.46k | { | 326 | 2.46k | Assume(pos < MAX_SIZE); | 327 | 2.46k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 2.46k | (I{val} << (pos % LIMB_BITS)); | 329 | 2.46k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EE3SetEjb Line | Count | Source | 325 | 3.06k | { | 326 | 3.06k | Assume(pos < MAX_SIZE); | 327 | 3.06k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 3.06k | (I{val} << (pos % LIMB_BITS)); | 329 | 3.06k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EE3SetEjb Line | Count | Source | 325 | 3.06k | { | 326 | 3.06k | Assume(pos < MAX_SIZE); | 327 | 3.06k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 3.06k | (I{val} << (pos % LIMB_BITS)); | 329 | 3.06k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EE3SetEjb Line | Count | Source | 325 | 3.06k | { | 326 | 3.06k | Assume(pos < MAX_SIZE); | 327 | 3.06k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 3.06k | (I{val} << (pos % LIMB_BITS)); | 329 | 3.06k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EE3SetEjb Line | Count | Source | 325 | 2.33k | { | 326 | 2.33k | Assume(pos < MAX_SIZE); | 327 | 2.33k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 2.33k | (I{val} << (pos % LIMB_BITS)); | 329 | 2.33k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EE3SetEjb Line | Count | Source | 325 | 4.21k | { | 326 | 4.21k | Assume(pos < MAX_SIZE); | 327 | 4.21k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 4.21k | (I{val} << (pos % LIMB_BITS)); | 329 | 4.21k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EE3SetEjb Line | Count | Source | 325 | 4.21k | { | 326 | 4.21k | Assume(pos < MAX_SIZE); | 327 | 4.21k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 4.21k | (I{val} << (pos % LIMB_BITS)); | 329 | 4.21k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EE3SetEjb Line | Count | Source | 325 | 3.38k | { | 326 | 3.38k | Assume(pos < MAX_SIZE); | 327 | 3.38k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 3.38k | (I{val} << (pos % LIMB_BITS)); | 329 | 3.38k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EE3SetEjb Line | Count | Source | 325 | 3.24k | { | 326 | 3.24k | Assume(pos < MAX_SIZE); | 327 | 3.24k | m_val[pos / LIMB_BITS] = (m_val[pos / LIMB_BITS] & ~I(I{1U} << (pos % LIMB_BITS))) | | 328 | 3.24k | (I{val} << (pos % LIMB_BITS)); | 329 | 3.24k | } |
|
330 | | /** Construct a bitset from a list of values. */ |
331 | 37.3k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} |
332 | 37.3k | { |
333 | 74.7k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 6.98k, False: 3.49k]
Branch (333:23): [True: 8.62k, False: 4.31k]
Branch (333:23): [True: 6.47k, False: 3.23k]
Branch (333:23): [True: 5.68k, False: 2.84k]
Branch (333:23): [True: 5.68k, False: 2.84k]
Branch (333:23): [True: 5.68k, False: 2.84k]
Branch (333:23): [True: 5.16k, False: 2.58k]
Branch (333:23): [True: 7.48k, False: 3.74k]
Branch (333:23): [True: 7.48k, False: 3.74k]
Branch (333:23): [True: 6.35k, False: 3.17k]
Branch (333:23): [True: 9.11k, False: 4.55k]
|
334 | 37.3k | } _ZN13bitset_detail14MultiIntBitSetItLj1EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 3.49k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 3.49k | { | 333 | 6.98k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 6.98k, False: 3.49k]
| 334 | 3.49k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 4.31k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 4.31k | { | 333 | 8.62k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 8.62k, False: 4.31k]
| 334 | 4.31k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 3.23k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 3.23k | { | 333 | 6.47k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 6.47k, False: 3.23k]
| 334 | 3.23k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 2.84k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 2.84k | { | 333 | 5.68k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 5.68k, False: 2.84k]
| 334 | 2.84k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 2.84k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 2.84k | { | 333 | 5.68k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 5.68k, False: 2.84k]
| 334 | 2.84k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 2.84k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 2.84k | { | 333 | 5.68k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 5.68k, False: 2.84k]
| 334 | 2.84k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 2.58k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 2.58k | { | 333 | 5.16k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 5.16k, False: 2.58k]
| 334 | 2.58k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 3.74k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 3.74k | { | 333 | 7.48k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 7.48k, False: 3.74k]
| 334 | 3.74k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 3.74k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 3.74k | { | 333 | 7.48k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 7.48k, False: 3.74k]
| 334 | 3.74k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 3.17k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 3.17k | { | 333 | 6.35k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 6.35k, False: 3.17k]
| 334 | 3.17k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EEC2ESt16initializer_listIjE Line | Count | Source | 331 | 4.55k | constexpr MultiIntBitSet(std::initializer_list<unsigned> ilist) noexcept : m_val{} | 332 | 4.55k | { | 333 | 9.11k | for (auto pos : ilist) Set(pos); Branch (333:23): [True: 9.11k, False: 4.55k]
| 334 | 4.55k | } |
|
335 | | /** Set a bitset to a list of values. */ |
336 | | constexpr MultiIntBitSet& operator=(std::initializer_list<unsigned> ilist) noexcept |
337 | 92.9k | { |
338 | 92.9k | m_val.fill(0); |
339 | 278k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 35.2k, False: 11.7k]
Branch (339:23): [True: 15.7k, False: 5.23k]
Branch (339:23): [True: 25.0k, False: 8.35k]
Branch (339:23): [True: 16.5k, False: 5.52k]
Branch (339:23): [True: 16.5k, False: 5.52k]
Branch (339:23): [True: 16.5k, False: 5.52k]
Branch (339:23): [True: 24.9k, False: 8.32k]
Branch (339:23): [True: 35.1k, False: 11.7k]
Branch (339:23): [True: 35.1k, False: 11.7k]
Branch (339:23): [True: 29.9k, False: 9.98k]
Branch (339:23): [True: 28.1k, False: 9.37k]
|
340 | 92.9k | return *this; |
341 | 92.9k | } _ZN13bitset_detail14MultiIntBitSetItLj1EEaSESt16initializer_listIjE Line | Count | Source | 337 | 11.7k | { | 338 | 11.7k | m_val.fill(0); | 339 | 35.2k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 35.2k, False: 11.7k]
| 340 | 11.7k | return *this; | 341 | 11.7k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EEaSESt16initializer_listIjE Line | Count | Source | 337 | 5.23k | { | 338 | 5.23k | m_val.fill(0); | 339 | 15.7k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 15.7k, False: 5.23k]
| 340 | 5.23k | return *this; | 341 | 5.23k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EEaSESt16initializer_listIjE Line | Count | Source | 337 | 8.35k | { | 338 | 8.35k | m_val.fill(0); | 339 | 25.0k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 25.0k, False: 8.35k]
| 340 | 8.35k | return *this; | 341 | 8.35k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EEaSESt16initializer_listIjE Line | Count | Source | 337 | 5.52k | { | 338 | 5.52k | m_val.fill(0); | 339 | 16.5k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 16.5k, False: 5.52k]
| 340 | 5.52k | return *this; | 341 | 5.52k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EEaSESt16initializer_listIjE Line | Count | Source | 337 | 5.52k | { | 338 | 5.52k | m_val.fill(0); | 339 | 16.5k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 16.5k, False: 5.52k]
| 340 | 5.52k | return *this; | 341 | 5.52k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EEaSESt16initializer_listIjE Line | Count | Source | 337 | 5.52k | { | 338 | 5.52k | m_val.fill(0); | 339 | 16.5k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 16.5k, False: 5.52k]
| 340 | 5.52k | return *this; | 341 | 5.52k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EEaSESt16initializer_listIjE Line | Count | Source | 337 | 8.32k | { | 338 | 8.32k | m_val.fill(0); | 339 | 24.9k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 24.9k, False: 8.32k]
| 340 | 8.32k | return *this; | 341 | 8.32k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EEaSESt16initializer_listIjE Line | Count | Source | 337 | 11.7k | { | 338 | 11.7k | m_val.fill(0); | 339 | 35.1k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 35.1k, False: 11.7k]
| 340 | 11.7k | return *this; | 341 | 11.7k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EEaSESt16initializer_listIjE Line | Count | Source | 337 | 11.7k | { | 338 | 11.7k | m_val.fill(0); | 339 | 35.1k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 35.1k, False: 11.7k]
| 340 | 11.7k | return *this; | 341 | 11.7k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EEaSESt16initializer_listIjE Line | Count | Source | 337 | 9.98k | { | 338 | 9.98k | m_val.fill(0); | 339 | 29.9k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 29.9k, False: 9.98k]
| 340 | 9.98k | return *this; | 341 | 9.98k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EEaSESt16initializer_listIjE Line | Count | Source | 337 | 9.37k | { | 338 | 9.37k | m_val.fill(0); | 339 | 28.1k | for (auto pos : ilist) Set(pos); Branch (339:23): [True: 28.1k, False: 9.37k]
| 340 | 9.37k | return *this; | 341 | 9.37k | } |
|
342 | | /** Set a bit to 0. */ |
343 | | void constexpr Reset(unsigned pos) noexcept |
344 | 4.09M | { |
345 | 4.09M | Assume(pos < MAX_SIZE); |
346 | 4.09M | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); |
347 | 4.09M | } _ZN13bitset_detail14MultiIntBitSetItLj1EE5ResetEj Line | Count | Source | 344 | 2.75k | { | 345 | 2.75k | Assume(pos < MAX_SIZE); | 346 | 2.75k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 2.75k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EE5ResetEj Line | Count | Source | 344 | 2.47k | { | 345 | 2.47k | Assume(pos < MAX_SIZE); | 346 | 2.47k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 2.47k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EE5ResetEj Line | Count | Source | 344 | 2.08k | { | 345 | 2.08k | Assume(pos < MAX_SIZE); | 346 | 2.08k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 2.08k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EE5ResetEj Line | Count | Source | 344 | 3.86k | { | 345 | 3.86k | Assume(pos < MAX_SIZE); | 346 | 3.86k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 3.86k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EE5ResetEj Line | Count | Source | 344 | 3.86k | { | 345 | 3.86k | Assume(pos < MAX_SIZE); | 346 | 3.86k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 3.86k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EE5ResetEj Line | Count | Source | 344 | 3.86k | { | 345 | 3.86k | Assume(pos < MAX_SIZE); | 346 | 3.86k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 3.86k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EE5ResetEj Line | Count | Source | 344 | 1.93k | { | 345 | 1.93k | Assume(pos < MAX_SIZE); | 346 | 1.93k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 1.93k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EE5ResetEj Line | Count | Source | 344 | 4.06M | { | 345 | 4.06M | Assume(pos < MAX_SIZE); | 346 | 4.06M | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 4.06M | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EE5ResetEj Line | Count | Source | 344 | 4.40k | { | 345 | 4.40k | Assume(pos < MAX_SIZE); | 346 | 4.40k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 4.40k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EE5ResetEj Line | Count | Source | 344 | 4.82k | { | 345 | 4.82k | Assume(pos < MAX_SIZE); | 346 | 4.82k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 4.82k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EE5ResetEj Line | Count | Source | 344 | 2.97k | { | 345 | 2.97k | Assume(pos < MAX_SIZE); | 346 | 2.97k | m_val[pos / LIMB_BITS] &= ~I(I{1U} << (pos % LIMB_BITS)); | 347 | 2.97k | } |
|
348 | | /** Retrieve a bit at the given position. */ |
349 | | bool constexpr operator[](unsigned pos) const noexcept |
350 | 151M | { |
351 | 151M | Assume(pos < MAX_SIZE); |
352 | 151M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; |
353 | 151M | } _ZNK13bitset_detail14MultiIntBitSetItLj1EEixEj Line | Count | Source | 350 | 1.70M | { | 351 | 1.70M | Assume(pos < MAX_SIZE); | 352 | 1.70M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 1.70M | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EEixEj Line | Count | Source | 350 | 3.01M | { | 351 | 3.01M | Assume(pos < MAX_SIZE); | 352 | 3.01M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 3.01M | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EEixEj Line | Count | Source | 350 | 3.80M | { | 351 | 3.80M | Assume(pos < MAX_SIZE); | 352 | 3.80M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 3.80M | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EEixEj Line | Count | Source | 350 | 6.31M | { | 351 | 6.31M | Assume(pos < MAX_SIZE); | 352 | 6.31M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 6.31M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EEixEj Line | Count | Source | 350 | 6.31M | { | 351 | 6.31M | Assume(pos < MAX_SIZE); | 352 | 6.31M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 6.31M | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EEixEj Line | Count | Source | 350 | 6.31M | { | 351 | 6.31M | Assume(pos < MAX_SIZE); | 352 | 6.31M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 6.31M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EEixEj Line | Count | Source | 350 | 8.21M | { | 351 | 8.21M | Assume(pos < MAX_SIZE); | 352 | 8.21M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 8.21M | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EEixEj Line | Count | Source | 350 | 50.0M | { | 351 | 50.0M | Assume(pos < MAX_SIZE); | 352 | 50.0M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 50.0M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EEixEj Line | Count | Source | 350 | 15.6M | { | 351 | 15.6M | Assume(pos < MAX_SIZE); | 352 | 15.6M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 15.6M | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EEixEj Line | Count | Source | 350 | 22.2M | { | 351 | 22.2M | Assume(pos < MAX_SIZE); | 352 | 22.2M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 22.2M | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EEixEj Line | Count | Source | 350 | 27.4M | { | 351 | 27.4M | Assume(pos < MAX_SIZE); | 352 | 27.4M | return (m_val[pos / LIMB_BITS] >> (pos % LIMB_BITS)) & 1U; | 353 | 27.4M | } |
|
354 | | /** Construct a bitset with the singleton pos. */ |
355 | | static constexpr MultiIntBitSet Singleton(unsigned pos) noexcept |
356 | 17.2M | { |
357 | 17.2M | Assume(pos < MAX_SIZE); |
358 | 17.2M | MultiIntBitSet ret; |
359 | 17.2M | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); |
360 | 17.2M | return ret; |
361 | 17.2M | } _ZN13bitset_detail14MultiIntBitSetItLj1EE9SingletonEj Line | Count | Source | 356 | 1.11k | { | 357 | 1.11k | Assume(pos < MAX_SIZE); | 358 | 1.11k | MultiIntBitSet ret; | 359 | 1.11k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 1.11k | return ret; | 361 | 1.11k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EE9SingletonEj Line | Count | Source | 356 | 1.21k | { | 357 | 1.21k | Assume(pos < MAX_SIZE); | 358 | 1.21k | MultiIntBitSet ret; | 359 | 1.21k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 1.21k | return ret; | 361 | 1.21k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EE9SingletonEj Line | Count | Source | 356 | 1.31k | { | 357 | 1.31k | Assume(pos < MAX_SIZE); | 358 | 1.31k | MultiIntBitSet ret; | 359 | 1.31k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 1.31k | return ret; | 361 | 1.31k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EE9SingletonEj Line | Count | Source | 356 | 1.03k | { | 357 | 1.03k | Assume(pos < MAX_SIZE); | 358 | 1.03k | MultiIntBitSet ret; | 359 | 1.03k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 1.03k | return ret; | 361 | 1.03k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EE9SingletonEj Line | Count | Source | 356 | 1.03k | { | 357 | 1.03k | Assume(pos < MAX_SIZE); | 358 | 1.03k | MultiIntBitSet ret; | 359 | 1.03k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 1.03k | return ret; | 361 | 1.03k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EE9SingletonEj Line | Count | Source | 356 | 1.03k | { | 357 | 1.03k | Assume(pos < MAX_SIZE); | 358 | 1.03k | MultiIntBitSet ret; | 359 | 1.03k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 1.03k | return ret; | 361 | 1.03k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EE9SingletonEj Line | Count | Source | 356 | 978 | { | 357 | 978 | Assume(pos < MAX_SIZE); | 358 | 978 | MultiIntBitSet ret; | 359 | 978 | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 978 | return ret; | 361 | 978 | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EE9SingletonEj Line | Count | Source | 356 | 17.2M | { | 357 | 17.2M | Assume(pos < MAX_SIZE); | 358 | 17.2M | MultiIntBitSet ret; | 359 | 17.2M | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 17.2M | return ret; | 361 | 17.2M | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EE9SingletonEj Line | Count | Source | 356 | 2.30k | { | 357 | 2.30k | Assume(pos < MAX_SIZE); | 358 | 2.30k | MultiIntBitSet ret; | 359 | 2.30k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 2.30k | return ret; | 361 | 2.30k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EE9SingletonEj Line | Count | Source | 356 | 1.88k | { | 357 | 1.88k | Assume(pos < MAX_SIZE); | 358 | 1.88k | MultiIntBitSet ret; | 359 | 1.88k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 1.88k | return ret; | 361 | 1.88k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EE9SingletonEj Line | Count | Source | 356 | 1.33k | { | 357 | 1.33k | Assume(pos < MAX_SIZE); | 358 | 1.33k | MultiIntBitSet ret; | 359 | 1.33k | ret.m_val[pos / LIMB_BITS] = I{1U} << (pos % LIMB_BITS); | 360 | 1.33k | return ret; | 361 | 1.33k | } |
|
362 | | /** Construct a bitset with bits 0..count-1 (inclusive) set to 1. */ |
363 | | static constexpr MultiIntBitSet Fill(unsigned count) noexcept |
364 | 74.7k | { |
365 | 74.7k | Assume(count <= MAX_SIZE); |
366 | 74.7k | MultiIntBitSet ret; |
367 | 74.7k | if (count) { Branch (367:13): [True: 6.26k, False: 991]
Branch (367:13): [True: 7.40k, False: 811]
Branch (367:13): [True: 4.00k, False: 629]
Branch (367:13): [True: 6.29k, False: 678]
Branch (367:13): [True: 6.29k, False: 678]
Branch (367:13): [True: 6.29k, False: 678]
Branch (367:13): [True: 4.88k, False: 543]
Branch (367:13): [True: 7.33k, False: 861]
Branch (367:13): [True: 6.57k, False: 810]
Branch (367:13): [True: 6.47k, False: 905]
Branch (367:13): [True: 4.31k, False: 1.06k]
|
368 | 66.1k | unsigned i = 0; |
369 | 109k | while (count > LIMB_BITS) { Branch (369:20): [True: 0, False: 6.26k]
Branch (369:20): [True: 3.56k, False: 7.40k]
Branch (369:20): [True: 2.97k, False: 4.00k]
Branch (369:20): [True: 0, False: 6.29k]
Branch (369:20): [True: 2.26k, False: 6.29k]
Branch (369:20): [True: 7.36k, False: 6.29k]
Branch (369:20): [True: 4.20k, False: 4.88k]
Branch (369:20): [True: 3.46k, False: 7.33k]
Branch (369:20): [True: 8.52k, False: 6.57k]
Branch (369:20): [True: 5.04k, False: 6.47k]
Branch (369:20): [True: 5.86k, False: 4.31k]
|
370 | 43.2k | ret.m_val[i++] = I(~I{0}); |
371 | 43.2k | count -= LIMB_BITS; |
372 | 43.2k | } |
373 | 66.1k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); |
374 | 66.1k | } |
375 | 74.7k | return ret; |
376 | 74.7k | } _ZN13bitset_detail14MultiIntBitSetItLj1EE4FillEj Line | Count | Source | 364 | 7.25k | { | 365 | 7.25k | Assume(count <= MAX_SIZE); | 366 | 7.25k | MultiIntBitSet ret; | 367 | 7.25k | if (count) { Branch (367:13): [True: 6.26k, False: 991]
| 368 | 6.26k | unsigned i = 0; | 369 | 6.26k | while (count > LIMB_BITS) { Branch (369:20): [True: 0, False: 6.26k]
| 370 | 0 | ret.m_val[i++] = I(~I{0}); | 371 | 0 | count -= LIMB_BITS; | 372 | 0 | } | 373 | 6.26k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 6.26k | } | 375 | 7.25k | return ret; | 376 | 7.25k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EE4FillEj Line | Count | Source | 364 | 8.21k | { | 365 | 8.21k | Assume(count <= MAX_SIZE); | 366 | 8.21k | MultiIntBitSet ret; | 367 | 8.21k | if (count) { Branch (367:13): [True: 7.40k, False: 811]
| 368 | 7.40k | unsigned i = 0; | 369 | 10.9k | while (count > LIMB_BITS) { Branch (369:20): [True: 3.56k, False: 7.40k]
| 370 | 3.56k | ret.m_val[i++] = I(~I{0}); | 371 | 3.56k | count -= LIMB_BITS; | 372 | 3.56k | } | 373 | 7.40k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 7.40k | } | 375 | 8.21k | return ret; | 376 | 8.21k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EE4FillEj Line | Count | Source | 364 | 4.63k | { | 365 | 4.63k | Assume(count <= MAX_SIZE); | 366 | 4.63k | MultiIntBitSet ret; | 367 | 4.63k | if (count) { Branch (367:13): [True: 4.00k, False: 629]
| 368 | 4.00k | unsigned i = 0; | 369 | 6.97k | while (count > LIMB_BITS) { Branch (369:20): [True: 2.97k, False: 4.00k]
| 370 | 2.97k | ret.m_val[i++] = I(~I{0}); | 371 | 2.97k | count -= LIMB_BITS; | 372 | 2.97k | } | 373 | 4.00k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 4.00k | } | 375 | 4.63k | return ret; | 376 | 4.63k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EE4FillEj Line | Count | Source | 364 | 6.97k | { | 365 | 6.97k | Assume(count <= MAX_SIZE); | 366 | 6.97k | MultiIntBitSet ret; | 367 | 6.97k | if (count) { Branch (367:13): [True: 6.29k, False: 678]
| 368 | 6.29k | unsigned i = 0; | 369 | 6.29k | while (count > LIMB_BITS) { Branch (369:20): [True: 0, False: 6.29k]
| 370 | 0 | ret.m_val[i++] = I(~I{0}); | 371 | 0 | count -= LIMB_BITS; | 372 | 0 | } | 373 | 6.29k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 6.29k | } | 375 | 6.97k | return ret; | 376 | 6.97k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EE4FillEj Line | Count | Source | 364 | 6.97k | { | 365 | 6.97k | Assume(count <= MAX_SIZE); | 366 | 6.97k | MultiIntBitSet ret; | 367 | 6.97k | if (count) { Branch (367:13): [True: 6.29k, False: 678]
| 368 | 6.29k | unsigned i = 0; | 369 | 8.56k | while (count > LIMB_BITS) { Branch (369:20): [True: 2.26k, False: 6.29k]
| 370 | 2.26k | ret.m_val[i++] = I(~I{0}); | 371 | 2.26k | count -= LIMB_BITS; | 372 | 2.26k | } | 373 | 6.29k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 6.29k | } | 375 | 6.97k | return ret; | 376 | 6.97k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EE4FillEj Line | Count | Source | 364 | 6.97k | { | 365 | 6.97k | Assume(count <= MAX_SIZE); | 366 | 6.97k | MultiIntBitSet ret; | 367 | 6.97k | if (count) { Branch (367:13): [True: 6.29k, False: 678]
| 368 | 6.29k | unsigned i = 0; | 369 | 13.6k | while (count > LIMB_BITS) { Branch (369:20): [True: 7.36k, False: 6.29k]
| 370 | 7.36k | ret.m_val[i++] = I(~I{0}); | 371 | 7.36k | count -= LIMB_BITS; | 372 | 7.36k | } | 373 | 6.29k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 6.29k | } | 375 | 6.97k | return ret; | 376 | 6.97k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EE4FillEj Line | Count | Source | 364 | 5.42k | { | 365 | 5.42k | Assume(count <= MAX_SIZE); | 366 | 5.42k | MultiIntBitSet ret; | 367 | 5.42k | if (count) { Branch (367:13): [True: 4.88k, False: 543]
| 368 | 4.88k | unsigned i = 0; | 369 | 9.08k | while (count > LIMB_BITS) { Branch (369:20): [True: 4.20k, False: 4.88k]
| 370 | 4.20k | ret.m_val[i++] = I(~I{0}); | 371 | 4.20k | count -= LIMB_BITS; | 372 | 4.20k | } | 373 | 4.88k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 4.88k | } | 375 | 5.42k | return ret; | 376 | 5.42k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EE4FillEj Line | Count | Source | 364 | 8.19k | { | 365 | 8.19k | Assume(count <= MAX_SIZE); | 366 | 8.19k | MultiIntBitSet ret; | 367 | 8.19k | if (count) { Branch (367:13): [True: 7.33k, False: 861]
| 368 | 7.33k | unsigned i = 0; | 369 | 10.7k | while (count > LIMB_BITS) { Branch (369:20): [True: 3.46k, False: 7.33k]
| 370 | 3.46k | ret.m_val[i++] = I(~I{0}); | 371 | 3.46k | count -= LIMB_BITS; | 372 | 3.46k | } | 373 | 7.33k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 7.33k | } | 375 | 8.19k | return ret; | 376 | 8.19k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EE4FillEj Line | Count | Source | 364 | 7.38k | { | 365 | 7.38k | Assume(count <= MAX_SIZE); | 366 | 7.38k | MultiIntBitSet ret; | 367 | 7.38k | if (count) { Branch (367:13): [True: 6.57k, False: 810]
| 368 | 6.57k | unsigned i = 0; | 369 | 15.1k | while (count > LIMB_BITS) { Branch (369:20): [True: 8.52k, False: 6.57k]
| 370 | 8.52k | ret.m_val[i++] = I(~I{0}); | 371 | 8.52k | count -= LIMB_BITS; | 372 | 8.52k | } | 373 | 6.57k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 6.57k | } | 375 | 7.38k | return ret; | 376 | 7.38k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EE4FillEj Line | Count | Source | 364 | 7.38k | { | 365 | 7.38k | Assume(count <= MAX_SIZE); | 366 | 7.38k | MultiIntBitSet ret; | 367 | 7.38k | if (count) { Branch (367:13): [True: 6.47k, False: 905]
| 368 | 6.47k | unsigned i = 0; | 369 | 11.5k | while (count > LIMB_BITS) { Branch (369:20): [True: 5.04k, False: 6.47k]
| 370 | 5.04k | ret.m_val[i++] = I(~I{0}); | 371 | 5.04k | count -= LIMB_BITS; | 372 | 5.04k | } | 373 | 6.47k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 6.47k | } | 375 | 7.38k | return ret; | 376 | 7.38k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EE4FillEj Line | Count | Source | 364 | 5.37k | { | 365 | 5.37k | Assume(count <= MAX_SIZE); | 366 | 5.37k | MultiIntBitSet ret; | 367 | 5.37k | if (count) { Branch (367:13): [True: 4.31k, False: 1.06k]
| 368 | 4.31k | unsigned i = 0; | 369 | 10.1k | while (count > LIMB_BITS) { Branch (369:20): [True: 5.86k, False: 4.31k]
| 370 | 5.86k | ret.m_val[i++] = I(~I{0}); | 371 | 5.86k | count -= LIMB_BITS; | 372 | 5.86k | } | 373 | 4.31k | ret.m_val[i] = I(~I{0}) >> (LIMB_BITS - count); | 374 | 4.31k | } | 375 | 5.37k | return ret; | 376 | 5.37k | } |
|
377 | | /** Return the number of bits that this object holds. */ |
378 | 94.2M | static constexpr unsigned Size() noexcept { return MAX_SIZE; }_ZN13bitset_detail14MultiIntBitSetItLj1EE4SizeEv Line | Count | Source | 378 | 1.62M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetItLj2EE4SizeEv Line | Count | Source | 378 | 2.65M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetItLj3EE4SizeEv Line | Count | Source | 378 | 3.20M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetImLj1EE4SizeEv Line | Count | Source | 378 | 5.43M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EE4SizeEv Line | Count | Source | 378 | 5.43M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetItLj4EE4SizeEv Line | Count | Source | 378 | 5.43M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EE4SizeEv Line | Count | Source | 378 | 6.12M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetImLj2EE4SizeEv Line | Count | Source | 378 | 12.6M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EE4SizeEv Line | Count | Source | 378 | 12.6M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetImLj3EE4SizeEv Line | Count | Source | 378 | 17.2M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
_ZN13bitset_detail14MultiIntBitSetImLj4EE4SizeEv Line | Count | Source | 378 | 21.8M | static constexpr unsigned Size() noexcept { return MAX_SIZE; } |
|
379 | | /** Compute the number of 1 bits in the bitset. */ |
380 | | unsigned constexpr Count() const noexcept |
381 | 13.8M | { |
382 | 13.8M | unsigned ret{0}; |
383 | 28.0M | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 52.9k, False: 52.9k]
Branch (383:18): [True: 93.7k, False: 46.8k]
Branch (383:18): [True: 118k, False: 39.5k]
Branch (383:18): [True: 49.1k, False: 49.1k]
Branch (383:18): [True: 98.3k, False: 49.1k]
Branch (383:18): [True: 196k, False: 49.1k]
Branch (383:18): [True: 128k, False: 42.7k]
Branch (383:18): [True: 26.6M, False: 13.3M]
Branch (383:18): [True: 244k, False: 61.0k]
Branch (383:18): [True: 173k, False: 57.9k]
Branch (383:18): [True: 214k, False: 53.5k]
|
384 | 13.8M | return ret; |
385 | 13.8M | } _ZNK13bitset_detail14MultiIntBitSetItLj1EE5CountEv Line | Count | Source | 381 | 52.9k | { | 382 | 52.9k | unsigned ret{0}; | 383 | 52.9k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 52.9k, False: 52.9k]
| 384 | 52.9k | return ret; | 385 | 52.9k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE5CountEv Line | Count | Source | 381 | 46.8k | { | 382 | 46.8k | unsigned ret{0}; | 383 | 93.7k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 93.7k, False: 46.8k]
| 384 | 46.8k | return ret; | 385 | 46.8k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE5CountEv Line | Count | Source | 381 | 39.5k | { | 382 | 39.5k | unsigned ret{0}; | 383 | 118k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 118k, False: 39.5k]
| 384 | 39.5k | return ret; | 385 | 39.5k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE5CountEv Line | Count | Source | 381 | 49.1k | { | 382 | 49.1k | unsigned ret{0}; | 383 | 49.1k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 49.1k, False: 49.1k]
| 384 | 49.1k | return ret; | 385 | 49.1k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE5CountEv Line | Count | Source | 381 | 49.1k | { | 382 | 49.1k | unsigned ret{0}; | 383 | 98.3k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 98.3k, False: 49.1k]
| 384 | 49.1k | return ret; | 385 | 49.1k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE5CountEv Line | Count | Source | 381 | 49.1k | { | 382 | 49.1k | unsigned ret{0}; | 383 | 196k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 196k, False: 49.1k]
| 384 | 49.1k | return ret; | 385 | 49.1k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE5CountEv Line | Count | Source | 381 | 42.7k | { | 382 | 42.7k | unsigned ret{0}; | 383 | 128k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 128k, False: 42.7k]
| 384 | 42.7k | return ret; | 385 | 42.7k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE5CountEv Line | Count | Source | 381 | 13.3M | { | 382 | 13.3M | unsigned ret{0}; | 383 | 26.6M | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 26.6M, False: 13.3M]
| 384 | 13.3M | return ret; | 385 | 13.3M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE5CountEv Line | Count | Source | 381 | 61.0k | { | 382 | 61.0k | unsigned ret{0}; | 383 | 244k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 244k, False: 61.0k]
| 384 | 61.0k | return ret; | 385 | 61.0k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE5CountEv Line | Count | Source | 381 | 57.9k | { | 382 | 57.9k | unsigned ret{0}; | 383 | 173k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 173k, False: 57.9k]
| 384 | 57.9k | return ret; | 385 | 57.9k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE5CountEv Line | Count | Source | 381 | 53.5k | { | 382 | 53.5k | unsigned ret{0}; | 383 | 214k | for (I v : m_val) ret += PopCount(v); Branch (383:18): [True: 214k, False: 53.5k]
| 384 | 53.5k | return ret; | 385 | 53.5k | } |
|
386 | | /** Check if all bits are 0. */ |
387 | | bool constexpr None() const noexcept |
388 | 46.9M | { |
389 | 65.4M | for (auto v : m_val) { Branch (389:21): [True: 105k, False: 19.6k]
Branch (389:21): [True: 119k, False: 17.1k]
Branch (389:21): [True: 134k, False: 17.5k]
Branch (389:21): [True: 98.3k, False: 18.3k]
Branch (389:21): [True: 125k, False: 18.3k]
Branch (389:21): [True: 183k, False: 18.3k]
Branch (389:21): [True: 144k, False: 19.6k]
Branch (389:21): [True: 63.9M, False: 13.5M]
Branch (389:21): [True: 232k, False: 21.5k]
Branch (389:21): [True: 183k, False: 20.4k]
Branch (389:21): [True: 208k, False: 20.0k]
|
390 | 65.4M | if (v != 0) return false; Branch (390:17): [True: 86.1k, False: 19.6k]
Branch (390:17): [True: 76.6k, False: 42.6k]
Branch (390:17): [True: 61.5k, False: 72.8k]
Branch (390:17): [True: 80.0k, False: 18.3k]
Branch (390:17): [True: 80.0k, False: 45.5k]
Branch (390:17): [True: 80.0k, False: 103k]
Branch (390:17): [True: 65.8k, False: 78.2k]
Branch (390:17): [True: 32.3M, False: 31.5M]
Branch (390:17): [True: 100k, False: 131k]
Branch (390:17): [True: 95.5k, False: 88.4k]
Branch (390:17): [True: 87.1k, False: 121k]
|
391 | 65.4M | } |
392 | 13.7M | return true; |
393 | 46.9M | } _ZNK13bitset_detail14MultiIntBitSetItLj1EE4NoneEv Line | Count | Source | 388 | 105k | { | 389 | 105k | for (auto v : m_val) { Branch (389:21): [True: 105k, False: 19.6k]
| 390 | 105k | if (v != 0) return false; Branch (390:17): [True: 86.1k, False: 19.6k]
| 391 | 105k | } | 392 | 19.6k | return true; | 393 | 105k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE4NoneEv Line | Count | Source | 388 | 93.7k | { | 389 | 119k | for (auto v : m_val) { Branch (389:21): [True: 119k, False: 17.1k]
| 390 | 119k | if (v != 0) return false; Branch (390:17): [True: 76.6k, False: 42.6k]
| 391 | 119k | } | 392 | 17.1k | return true; | 393 | 93.7k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE4NoneEv Line | Count | Source | 388 | 79.1k | { | 389 | 134k | for (auto v : m_val) { Branch (389:21): [True: 134k, False: 17.5k]
| 390 | 134k | if (v != 0) return false; Branch (390:17): [True: 61.5k, False: 72.8k]
| 391 | 134k | } | 392 | 17.5k | return true; | 393 | 79.1k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE4NoneEv Line | Count | Source | 388 | 98.3k | { | 389 | 98.3k | for (auto v : m_val) { Branch (389:21): [True: 98.3k, False: 18.3k]
| 390 | 98.3k | if (v != 0) return false; Branch (390:17): [True: 80.0k, False: 18.3k]
| 391 | 98.3k | } | 392 | 18.3k | return true; | 393 | 98.3k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE4NoneEv Line | Count | Source | 388 | 98.3k | { | 389 | 125k | for (auto v : m_val) { Branch (389:21): [True: 125k, False: 18.3k]
| 390 | 125k | if (v != 0) return false; Branch (390:17): [True: 80.0k, False: 45.5k]
| 391 | 125k | } | 392 | 18.3k | return true; | 393 | 98.3k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE4NoneEv Line | Count | Source | 388 | 98.3k | { | 389 | 183k | for (auto v : m_val) { Branch (389:21): [True: 183k, False: 18.3k]
| 390 | 183k | if (v != 0) return false; Branch (390:17): [True: 80.0k, False: 103k]
| 391 | 183k | } | 392 | 18.3k | return true; | 393 | 98.3k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE4NoneEv Line | Count | Source | 388 | 85.4k | { | 389 | 144k | for (auto v : m_val) { Branch (389:21): [True: 144k, False: 19.6k]
| 390 | 144k | if (v != 0) return false; Branch (390:17): [True: 65.8k, False: 78.2k]
| 391 | 144k | } | 392 | 19.6k | return true; | 393 | 85.4k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE4NoneEv Line | Count | Source | 388 | 45.9M | { | 389 | 63.9M | for (auto v : m_val) { Branch (389:21): [True: 63.9M, False: 13.5M]
| 390 | 63.9M | if (v != 0) return false; Branch (390:17): [True: 32.3M, False: 31.5M]
| 391 | 63.9M | } | 392 | 13.5M | return true; | 393 | 45.9M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE4NoneEv Line | Count | Source | 388 | 122k | { | 389 | 232k | for (auto v : m_val) { Branch (389:21): [True: 232k, False: 21.5k]
| 390 | 232k | if (v != 0) return false; Branch (390:17): [True: 100k, False: 131k]
| 391 | 232k | } | 392 | 21.5k | return true; | 393 | 122k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE4NoneEv Line | Count | Source | 388 | 115k | { | 389 | 183k | for (auto v : m_val) { Branch (389:21): [True: 183k, False: 20.4k]
| 390 | 183k | if (v != 0) return false; Branch (390:17): [True: 95.5k, False: 88.4k]
| 391 | 183k | } | 392 | 20.4k | return true; | 393 | 115k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE4NoneEv Line | Count | Source | 388 | 107k | { | 389 | 208k | for (auto v : m_val) { Branch (389:21): [True: 208k, False: 20.0k]
| 390 | 208k | if (v != 0) return false; Branch (390:17): [True: 87.1k, False: 121k]
| 391 | 208k | } | 392 | 20.0k | return true; | 393 | 107k | } |
|
394 | | /** Check if any bits are 1. */ |
395 | 36.7M | bool constexpr Any() const noexcept { return !None(); }_ZNK13bitset_detail14MultiIntBitSetItLj1EE3AnyEv Line | Count | Source | 395 | 52.9k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE3AnyEv Line | Count | Source | 395 | 46.8k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE3AnyEv Line | Count | Source | 395 | 39.5k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE3AnyEv Line | Count | Source | 395 | 49.1k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE3AnyEv Line | Count | Source | 395 | 49.1k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE3AnyEv Line | Count | Source | 395 | 49.1k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE3AnyEv Line | Count | Source | 395 | 42.7k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE3AnyEv Line | Count | Source | 395 | 36.2M | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE3AnyEv Line | Count | Source | 395 | 61.0k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE3AnyEv Line | Count | Source | 395 | 57.9k | bool constexpr Any() const noexcept { return !None(); } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE3AnyEv Line | Count | Source | 395 | 53.5k | bool constexpr Any() const noexcept { return !None(); } |
|
396 | | /** Return an object that iterates over all 1 bits (++ and * only allowed when != end()). */ |
397 | 38.7M | Iterator constexpr begin() const noexcept { return Iterator(m_val); }_ZNK13bitset_detail14MultiIntBitSetItLj1EE5beginEv Line | Count | Source | 397 | 61.5k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE5beginEv Line | Count | Source | 397 | 55.0k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE5beginEv Line | Count | Source | 397 | 47.2k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE5beginEv Line | Count | Source | 397 | 59.3k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE5beginEv Line | Count | Source | 397 | 59.3k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE5beginEv Line | Count | Source | 397 | 59.3k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE5beginEv Line | Count | Source | 397 | 48.8k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE5beginEv Line | Count | Source | 397 | 38.1M | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE5beginEv Line | Count | Source | 397 | 72.3k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE5beginEv Line | Count | Source | 397 | 66.1k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE5beginEv Line | Count | Source | 397 | 64.1k | Iterator constexpr begin() const noexcept { return Iterator(m_val); } |
|
398 | | /** Return a dummy object to compare Iterators with. */ |
399 | 229M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); }_ZNK13bitset_detail14MultiIntBitSetItLj1EE3endEv Line | Count | Source | 399 | 2.84M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE3endEv Line | Count | Source | 399 | 4.95M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE3endEv Line | Count | Source | 399 | 6.39M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE3endEv Line | Count | Source | 399 | 10.4M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE3endEv Line | Count | Source | 399 | 10.4M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE3endEv Line | Count | Source | 399 | 10.4M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE3endEv Line | Count | Source | 399 | 13.2M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE3endEv Line | Count | Source | 399 | 63.8M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE3endEv Line | Count | Source | 399 | 25.7M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE3endEv Line | Count | Source | 399 | 36.0M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE3endEv Line | Count | Source | 399 | 45.0M | IteratorEnd constexpr end() const noexcept { return IteratorEnd(); } |
|
400 | | /** Find the first element (requires Any()). */ |
401 | | unsigned constexpr First() const noexcept |
402 | 9.03M | { |
403 | 9.03M | unsigned p = 0; |
404 | 10.5M | while (m_val[p] == 0) { Branch (404:16): [True: 0, False: 43.0k]
Branch (404:16): [True: 4.19k, False: 38.3k]
Branch (404:16): [True: 10.0k, False: 30.7k]
Branch (404:16): [True: 0, False: 40.0k]
Branch (404:16): [True: 4.41k, False: 40.0k]
Branch (404:16): [True: 14.9k, False: 40.0k]
Branch (404:16): [True: 9.62k, False: 32.9k]
Branch (404:16): [True: 1.41M, False: 8.62M]
Branch (404:16): [True: 22.9k, False: 50.3k]
Branch (404:16): [True: 13.6k, False: 47.7k]
Branch (404:16): [True: 20.9k, False: 43.5k]
|
405 | 1.51M | ++p; |
406 | 1.51M | Assume(p < N); |
407 | 1.51M | } |
408 | 9.03M | return std::countr_zero(m_val[p]) + p * LIMB_BITS; |
409 | 9.03M | } _ZNK13bitset_detail14MultiIntBitSetItLj1EE5FirstEv Line | Count | Source | 402 | 43.0k | { | 403 | 43.0k | unsigned p = 0; | 404 | 43.0k | while (m_val[p] == 0) { Branch (404:16): [True: 0, False: 43.0k]
| 405 | 0 | ++p; | 406 | 0 | Assume(p < N); | 407 | 0 | } | 408 | 43.0k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 43.0k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE5FirstEv Line | Count | Source | 402 | 38.3k | { | 403 | 38.3k | unsigned p = 0; | 404 | 42.5k | while (m_val[p] == 0) { Branch (404:16): [True: 4.19k, False: 38.3k]
| 405 | 4.19k | ++p; | 406 | 4.19k | Assume(p < N); | 407 | 4.19k | } | 408 | 38.3k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 38.3k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE5FirstEv Line | Count | Source | 402 | 30.7k | { | 403 | 30.7k | unsigned p = 0; | 404 | 40.8k | while (m_val[p] == 0) { Branch (404:16): [True: 10.0k, False: 30.7k]
| 405 | 10.0k | ++p; | 406 | 10.0k | Assume(p < N); | 407 | 10.0k | } | 408 | 30.7k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 30.7k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE5FirstEv Line | Count | Source | 402 | 40.0k | { | 403 | 40.0k | unsigned p = 0; | 404 | 40.0k | while (m_val[p] == 0) { Branch (404:16): [True: 0, False: 40.0k]
| 405 | 0 | ++p; | 406 | 0 | Assume(p < N); | 407 | 0 | } | 408 | 40.0k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 40.0k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE5FirstEv Line | Count | Source | 402 | 40.0k | { | 403 | 40.0k | unsigned p = 0; | 404 | 44.4k | while (m_val[p] == 0) { Branch (404:16): [True: 4.41k, False: 40.0k]
| 405 | 4.41k | ++p; | 406 | 4.41k | Assume(p < N); | 407 | 4.41k | } | 408 | 40.0k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 40.0k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE5FirstEv Line | Count | Source | 402 | 40.0k | { | 403 | 40.0k | unsigned p = 0; | 404 | 54.9k | while (m_val[p] == 0) { Branch (404:16): [True: 14.9k, False: 40.0k]
| 405 | 14.9k | ++p; | 406 | 14.9k | Assume(p < N); | 407 | 14.9k | } | 408 | 40.0k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 40.0k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE5FirstEv Line | Count | Source | 402 | 32.9k | { | 403 | 32.9k | unsigned p = 0; | 404 | 42.5k | while (m_val[p] == 0) { Branch (404:16): [True: 9.62k, False: 32.9k]
| 405 | 9.62k | ++p; | 406 | 9.62k | Assume(p < N); | 407 | 9.62k | } | 408 | 32.9k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 32.9k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE5FirstEv Line | Count | Source | 402 | 8.62M | { | 403 | 8.62M | unsigned p = 0; | 404 | 10.0M | while (m_val[p] == 0) { Branch (404:16): [True: 1.41M, False: 8.62M]
| 405 | 1.41M | ++p; | 406 | 1.41M | Assume(p < N); | 407 | 1.41M | } | 408 | 8.62M | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 8.62M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE5FirstEv Line | Count | Source | 402 | 50.3k | { | 403 | 50.3k | unsigned p = 0; | 404 | 73.2k | while (m_val[p] == 0) { Branch (404:16): [True: 22.9k, False: 50.3k]
| 405 | 22.9k | ++p; | 406 | 22.9k | Assume(p < N); | 407 | 22.9k | } | 408 | 50.3k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 50.3k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE5FirstEv Line | Count | Source | 402 | 47.7k | { | 403 | 47.7k | unsigned p = 0; | 404 | 61.3k | while (m_val[p] == 0) { Branch (404:16): [True: 13.6k, False: 47.7k]
| 405 | 13.6k | ++p; | 406 | 13.6k | Assume(p < N); | 407 | 13.6k | } | 408 | 47.7k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 47.7k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE5FirstEv Line | Count | Source | 402 | 43.5k | { | 403 | 43.5k | unsigned p = 0; | 404 | 64.4k | while (m_val[p] == 0) { Branch (404:16): [True: 20.9k, False: 43.5k]
| 405 | 20.9k | ++p; | 406 | 20.9k | Assume(p < N); | 407 | 20.9k | } | 408 | 43.5k | return std::countr_zero(m_val[p]) + p * LIMB_BITS; | 409 | 43.5k | } |
|
410 | | /** Find the last element (requires Any()). */ |
411 | | unsigned constexpr Last() const noexcept |
412 | 457k | { |
413 | 457k | unsigned p = N - 1; |
414 | 641k | while (m_val[p] == 0) { Branch (414:16): [True: 0, False: 43.0k]
Branch (414:16): [True: 9.13k, False: 38.3k]
Branch (414:16): [True: 15.5k, False: 30.7k]
Branch (414:16): [True: 0, False: 40.0k]
Branch (414:16): [True: 9.15k, False: 40.0k]
Branch (414:16): [True: 29.5k, False: 40.0k]
Branch (414:16): [True: 17.1k, False: 32.9k]
Branch (414:16): [True: 10.5k, False: 50.3k]
Branch (414:16): [True: 36.9k, False: 50.3k]
Branch (414:16): [True: 25.4k, False: 47.7k]
Branch (414:16): [True: 30.6k, False: 43.5k]
|
415 | 184k | Assume(p > 0); |
416 | 184k | --p; |
417 | 184k | } |
418 | 457k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; |
419 | 457k | } _ZNK13bitset_detail14MultiIntBitSetItLj1EE4LastEv Line | Count | Source | 412 | 43.0k | { | 413 | 43.0k | unsigned p = N - 1; | 414 | 43.0k | while (m_val[p] == 0) { Branch (414:16): [True: 0, False: 43.0k]
| 415 | 0 | Assume(p > 0); | 416 | 0 | --p; | 417 | 0 | } | 418 | 43.0k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 43.0k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE4LastEv Line | Count | Source | 412 | 38.3k | { | 413 | 38.3k | unsigned p = N - 1; | 414 | 47.4k | while (m_val[p] == 0) { Branch (414:16): [True: 9.13k, False: 38.3k]
| 415 | 9.13k | Assume(p > 0); | 416 | 9.13k | --p; | 417 | 9.13k | } | 418 | 38.3k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 38.3k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE4LastEv Line | Count | Source | 412 | 30.7k | { | 413 | 30.7k | unsigned p = N - 1; | 414 | 46.2k | while (m_val[p] == 0) { Branch (414:16): [True: 15.5k, False: 30.7k]
| 415 | 15.5k | Assume(p > 0); | 416 | 15.5k | --p; | 417 | 15.5k | } | 418 | 30.7k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 30.7k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE4LastEv Line | Count | Source | 412 | 40.0k | { | 413 | 40.0k | unsigned p = N - 1; | 414 | 40.0k | while (m_val[p] == 0) { Branch (414:16): [True: 0, False: 40.0k]
| 415 | 0 | Assume(p > 0); | 416 | 0 | --p; | 417 | 0 | } | 418 | 40.0k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 40.0k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE4LastEv Line | Count | Source | 412 | 40.0k | { | 413 | 40.0k | unsigned p = N - 1; | 414 | 49.1k | while (m_val[p] == 0) { Branch (414:16): [True: 9.15k, False: 40.0k]
| 415 | 9.15k | Assume(p > 0); | 416 | 9.15k | --p; | 417 | 9.15k | } | 418 | 40.0k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 40.0k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE4LastEv Line | Count | Source | 412 | 40.0k | { | 413 | 40.0k | unsigned p = N - 1; | 414 | 69.5k | while (m_val[p] == 0) { Branch (414:16): [True: 29.5k, False: 40.0k]
| 415 | 29.5k | Assume(p > 0); | 416 | 29.5k | --p; | 417 | 29.5k | } | 418 | 40.0k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 40.0k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE4LastEv Line | Count | Source | 412 | 32.9k | { | 413 | 32.9k | unsigned p = N - 1; | 414 | 50.0k | while (m_val[p] == 0) { Branch (414:16): [True: 17.1k, False: 32.9k]
| 415 | 17.1k | Assume(p > 0); | 416 | 17.1k | --p; | 417 | 17.1k | } | 418 | 32.9k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 32.9k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE4LastEv Line | Count | Source | 412 | 50.3k | { | 413 | 50.3k | unsigned p = N - 1; | 414 | 60.9k | while (m_val[p] == 0) { Branch (414:16): [True: 10.5k, False: 50.3k]
| 415 | 10.5k | Assume(p > 0); | 416 | 10.5k | --p; | 417 | 10.5k | } | 418 | 50.3k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 50.3k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE4LastEv Line | Count | Source | 412 | 50.3k | { | 413 | 50.3k | unsigned p = N - 1; | 414 | 87.3k | while (m_val[p] == 0) { Branch (414:16): [True: 36.9k, False: 50.3k]
| 415 | 36.9k | Assume(p > 0); | 416 | 36.9k | --p; | 417 | 36.9k | } | 418 | 50.3k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 50.3k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE4LastEv Line | Count | Source | 412 | 47.7k | { | 413 | 47.7k | unsigned p = N - 1; | 414 | 73.2k | while (m_val[p] == 0) { Branch (414:16): [True: 25.4k, False: 47.7k]
| 415 | 25.4k | Assume(p > 0); | 416 | 25.4k | --p; | 417 | 25.4k | } | 418 | 47.7k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 47.7k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE4LastEv Line | Count | Source | 412 | 43.5k | { | 413 | 43.5k | unsigned p = N - 1; | 414 | 74.2k | while (m_val[p] == 0) { Branch (414:16): [True: 30.6k, False: 43.5k]
| 415 | 30.6k | Assume(p > 0); | 416 | 30.6k | --p; | 417 | 30.6k | } | 418 | 43.5k | return std::bit_width(m_val[p]) - 1 + p * LIMB_BITS; | 419 | 43.5k | } |
|
420 | | /** Set this object's bits to be the binary OR between respective bits from this and a. */ |
421 | | constexpr MultiIntBitSet& operator|=(const MultiIntBitSet& a) noexcept |
422 | 107M | { |
423 | 322M | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 2.71k, False: 2.71k]
Branch (423:30): [True: 6.08k, False: 3.04k]
Branch (423:30): [True: 4.02k, False: 1.34k]
Branch (423:30): [True: 3.91k, False: 3.91k]
Branch (423:30): [True: 7.82k, False: 3.91k]
Branch (423:30): [True: 15.6k, False: 3.91k]
Branch (423:30): [True: 6.15k, False: 2.05k]
Branch (423:30): [True: 214M, False: 107M]
Branch (423:30): [True: 12.3k, False: 3.09k]
Branch (423:30): [True: 10.0k, False: 3.34k]
Branch (423:30): [True: 9.49k, False: 2.37k]
|
424 | 214M | m_val[i] |= a.m_val[i]; |
425 | 214M | } |
426 | 107M | return *this; |
427 | 107M | } _ZN13bitset_detail14MultiIntBitSetItLj1EEoRERKS1_ Line | Count | Source | 422 | 2.71k | { | 423 | 5.42k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 2.71k, False: 2.71k]
| 424 | 2.71k | m_val[i] |= a.m_val[i]; | 425 | 2.71k | } | 426 | 2.71k | return *this; | 427 | 2.71k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EEoRERKS1_ Line | Count | Source | 422 | 3.04k | { | 423 | 9.12k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 6.08k, False: 3.04k]
| 424 | 6.08k | m_val[i] |= a.m_val[i]; | 425 | 6.08k | } | 426 | 3.04k | return *this; | 427 | 3.04k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EEoRERKS1_ Line | Count | Source | 422 | 1.34k | { | 423 | 5.36k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 4.02k, False: 1.34k]
| 424 | 4.02k | m_val[i] |= a.m_val[i]; | 425 | 4.02k | } | 426 | 1.34k | return *this; | 427 | 1.34k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EEoRERKS1_ Line | Count | Source | 422 | 3.91k | { | 423 | 7.82k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 3.91k, False: 3.91k]
| 424 | 3.91k | m_val[i] |= a.m_val[i]; | 425 | 3.91k | } | 426 | 3.91k | return *this; | 427 | 3.91k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EEoRERKS1_ Line | Count | Source | 422 | 3.91k | { | 423 | 11.7k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 7.82k, False: 3.91k]
| 424 | 7.82k | m_val[i] |= a.m_val[i]; | 425 | 7.82k | } | 426 | 3.91k | return *this; | 427 | 3.91k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EEoRERKS1_ Line | Count | Source | 422 | 3.91k | { | 423 | 19.5k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 15.6k, False: 3.91k]
| 424 | 15.6k | m_val[i] |= a.m_val[i]; | 425 | 15.6k | } | 426 | 3.91k | return *this; | 427 | 3.91k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EEoRERKS1_ Line | Count | Source | 422 | 2.05k | { | 423 | 8.20k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 6.15k, False: 2.05k]
| 424 | 6.15k | m_val[i] |= a.m_val[i]; | 425 | 6.15k | } | 426 | 2.05k | return *this; | 427 | 2.05k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EEoRERKS1_ Line | Count | Source | 422 | 107M | { | 423 | 322M | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 214M, False: 107M]
| 424 | 214M | m_val[i] |= a.m_val[i]; | 425 | 214M | } | 426 | 107M | return *this; | 427 | 107M | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EEoRERKS1_ Line | Count | Source | 422 | 3.09k | { | 423 | 15.4k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 12.3k, False: 3.09k]
| 424 | 12.3k | m_val[i] |= a.m_val[i]; | 425 | 12.3k | } | 426 | 3.09k | return *this; | 427 | 3.09k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EEoRERKS1_ Line | Count | Source | 422 | 3.34k | { | 423 | 13.3k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 10.0k, False: 3.34k]
| 424 | 10.0k | m_val[i] |= a.m_val[i]; | 425 | 10.0k | } | 426 | 3.34k | return *this; | 427 | 3.34k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EEoRERKS1_ Line | Count | Source | 422 | 2.37k | { | 423 | 11.8k | for (unsigned i = 0; i < N; ++i) { Branch (423:30): [True: 9.49k, False: 2.37k]
| 424 | 9.49k | m_val[i] |= a.m_val[i]; | 425 | 9.49k | } | 426 | 2.37k | return *this; | 427 | 2.37k | } |
|
428 | | /** Set this object's bits to be the binary AND between respective bits from this and a. */ |
429 | | constexpr MultiIntBitSet& operator&=(const MultiIntBitSet& a) noexcept |
430 | 75.8M | { |
431 | 227M | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 3.29k, False: 3.29k]
Branch (431:30): [True: 4.10k, False: 2.05k]
Branch (431:30): [True: 6.12k, False: 2.04k]
Branch (431:30): [True: 2.89k, False: 2.89k]
Branch (431:30): [True: 5.78k, False: 2.89k]
Branch (431:30): [True: 11.5k, False: 2.89k]
Branch (431:30): [True: 7.51k, False: 2.50k]
Branch (431:30): [True: 151M, False: 75.8M]
Branch (431:30): [True: 12.0k, False: 3.00k]
Branch (431:30): [True: 8.42k, False: 2.80k]
Branch (431:30): [True: 7.82k, False: 1.95k]
|
432 | 151M | m_val[i] &= a.m_val[i]; |
433 | 151M | } |
434 | 75.8M | return *this; |
435 | 75.8M | } _ZN13bitset_detail14MultiIntBitSetItLj1EEaNERKS1_ Line | Count | Source | 430 | 3.29k | { | 431 | 6.58k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 3.29k, False: 3.29k]
| 432 | 3.29k | m_val[i] &= a.m_val[i]; | 433 | 3.29k | } | 434 | 3.29k | return *this; | 435 | 3.29k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EEaNERKS1_ Line | Count | Source | 430 | 2.05k | { | 431 | 6.15k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 4.10k, False: 2.05k]
| 432 | 4.10k | m_val[i] &= a.m_val[i]; | 433 | 4.10k | } | 434 | 2.05k | return *this; | 435 | 2.05k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EEaNERKS1_ Line | Count | Source | 430 | 2.04k | { | 431 | 8.17k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 6.12k, False: 2.04k]
| 432 | 6.12k | m_val[i] &= a.m_val[i]; | 433 | 6.12k | } | 434 | 2.04k | return *this; | 435 | 2.04k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EEaNERKS1_ Line | Count | Source | 430 | 2.89k | { | 431 | 5.78k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 2.89k, False: 2.89k]
| 432 | 2.89k | m_val[i] &= a.m_val[i]; | 433 | 2.89k | } | 434 | 2.89k | return *this; | 435 | 2.89k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EEaNERKS1_ Line | Count | Source | 430 | 2.89k | { | 431 | 8.67k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 5.78k, False: 2.89k]
| 432 | 5.78k | m_val[i] &= a.m_val[i]; | 433 | 5.78k | } | 434 | 2.89k | return *this; | 435 | 2.89k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EEaNERKS1_ Line | Count | Source | 430 | 2.89k | { | 431 | 14.4k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 11.5k, False: 2.89k]
| 432 | 11.5k | m_val[i] &= a.m_val[i]; | 433 | 11.5k | } | 434 | 2.89k | return *this; | 435 | 2.89k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EEaNERKS1_ Line | Count | Source | 430 | 2.50k | { | 431 | 10.0k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 7.51k, False: 2.50k]
| 432 | 7.51k | m_val[i] &= a.m_val[i]; | 433 | 7.51k | } | 434 | 2.50k | return *this; | 435 | 2.50k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EEaNERKS1_ Line | Count | Source | 430 | 75.8M | { | 431 | 227M | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 151M, False: 75.8M]
| 432 | 151M | m_val[i] &= a.m_val[i]; | 433 | 151M | } | 434 | 75.8M | return *this; | 435 | 75.8M | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EEaNERKS1_ Line | Count | Source | 430 | 3.00k | { | 431 | 15.0k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 12.0k, False: 3.00k]
| 432 | 12.0k | m_val[i] &= a.m_val[i]; | 433 | 12.0k | } | 434 | 3.00k | return *this; | 435 | 3.00k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EEaNERKS1_ Line | Count | Source | 430 | 2.80k | { | 431 | 11.2k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 8.42k, False: 2.80k]
| 432 | 8.42k | m_val[i] &= a.m_val[i]; | 433 | 8.42k | } | 434 | 2.80k | return *this; | 435 | 2.80k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EEaNERKS1_ Line | Count | Source | 430 | 1.95k | { | 431 | 9.78k | for (unsigned i = 0; i < N; ++i) { Branch (431:30): [True: 7.82k, False: 1.95k]
| 432 | 7.82k | m_val[i] &= a.m_val[i]; | 433 | 7.82k | } | 434 | 1.95k | return *this; | 435 | 1.95k | } |
|
436 | | /** Set this object's bits to be the binary AND NOT between respective bits from this and a. */ |
437 | | constexpr MultiIntBitSet& operator-=(const MultiIntBitSet& a) noexcept |
438 | 8.11M | { |
439 | 24.3M | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 2.20k, False: 2.20k]
Branch (439:30): [True: 3.97k, False: 1.98k]
Branch (439:30): [True: 7.12k, False: 2.37k]
Branch (439:30): [True: 2.41k, False: 2.41k]
Branch (439:30): [True: 4.83k, False: 2.41k]
Branch (439:30): [True: 9.66k, False: 2.41k]
Branch (439:30): [True: 7.76k, False: 2.58k]
Branch (439:30): [True: 16.1M, False: 8.08M]
Branch (439:30): [True: 10.7k, False: 2.69k]
Branch (439:30): [True: 10.2k, False: 3.41k]
Branch (439:30): [True: 10.3k, False: 2.57k]
|
440 | 16.2M | m_val[i] &= ~a.m_val[i]; |
441 | 16.2M | } |
442 | 8.11M | return *this; |
443 | 8.11M | } _ZN13bitset_detail14MultiIntBitSetItLj1EEmIERKS1_ Line | Count | Source | 438 | 2.20k | { | 439 | 4.41k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 2.20k, False: 2.20k]
| 440 | 2.20k | m_val[i] &= ~a.m_val[i]; | 441 | 2.20k | } | 442 | 2.20k | return *this; | 443 | 2.20k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EEmIERKS1_ Line | Count | Source | 438 | 1.98k | { | 439 | 5.95k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 3.97k, False: 1.98k]
| 440 | 3.97k | m_val[i] &= ~a.m_val[i]; | 441 | 3.97k | } | 442 | 1.98k | return *this; | 443 | 1.98k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EEmIERKS1_ Line | Count | Source | 438 | 2.37k | { | 439 | 9.50k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 7.12k, False: 2.37k]
| 440 | 7.12k | m_val[i] &= ~a.m_val[i]; | 441 | 7.12k | } | 442 | 2.37k | return *this; | 443 | 2.37k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EEmIERKS1_ Line | Count | Source | 438 | 2.41k | { | 439 | 4.83k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 2.41k, False: 2.41k]
| 440 | 2.41k | m_val[i] &= ~a.m_val[i]; | 441 | 2.41k | } | 442 | 2.41k | return *this; | 443 | 2.41k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EEmIERKS1_ Line | Count | Source | 438 | 2.41k | { | 439 | 7.24k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 4.83k, False: 2.41k]
| 440 | 4.83k | m_val[i] &= ~a.m_val[i]; | 441 | 4.83k | } | 442 | 2.41k | return *this; | 443 | 2.41k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EEmIERKS1_ Line | Count | Source | 438 | 2.41k | { | 439 | 12.0k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 9.66k, False: 2.41k]
| 440 | 9.66k | m_val[i] &= ~a.m_val[i]; | 441 | 9.66k | } | 442 | 2.41k | return *this; | 443 | 2.41k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EEmIERKS1_ Line | Count | Source | 438 | 2.58k | { | 439 | 10.3k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 7.76k, False: 2.58k]
| 440 | 7.76k | m_val[i] &= ~a.m_val[i]; | 441 | 7.76k | } | 442 | 2.58k | return *this; | 443 | 2.58k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EEmIERKS1_ Line | Count | Source | 438 | 8.08M | { | 439 | 24.2M | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 16.1M, False: 8.08M]
| 440 | 16.1M | m_val[i] &= ~a.m_val[i]; | 441 | 16.1M | } | 442 | 8.08M | return *this; | 443 | 8.08M | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EEmIERKS1_ Line | Count | Source | 438 | 2.69k | { | 439 | 13.4k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 10.7k, False: 2.69k]
| 440 | 10.7k | m_val[i] &= ~a.m_val[i]; | 441 | 10.7k | } | 442 | 2.69k | return *this; | 443 | 2.69k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EEmIERKS1_ Line | Count | Source | 438 | 3.41k | { | 439 | 13.6k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 10.2k, False: 3.41k]
| 440 | 10.2k | m_val[i] &= ~a.m_val[i]; | 441 | 10.2k | } | 442 | 3.41k | return *this; | 443 | 3.41k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EEmIERKS1_ Line | Count | Source | 438 | 2.57k | { | 439 | 12.8k | for (unsigned i = 0; i < N; ++i) { Branch (439:30): [True: 10.3k, False: 2.57k]
| 440 | 10.3k | m_val[i] &= ~a.m_val[i]; | 441 | 10.3k | } | 442 | 2.57k | return *this; | 443 | 2.57k | } |
|
444 | | /** Set this object's bits to be the binary XOR between respective bits from this and a. */ |
445 | | constexpr MultiIntBitSet& operator^=(const MultiIntBitSet& a) noexcept |
446 | 21.7k | { |
447 | 79.7k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 1.80k, False: 1.80k]
Branch (447:30): [True: 3.29k, False: 1.64k]
Branch (447:30): [True: 4.76k, False: 1.58k]
Branch (447:30): [True: 2.12k, False: 2.12k]
Branch (447:30): [True: 4.24k, False: 2.12k]
Branch (447:30): [True: 8.49k, False: 2.12k]
Branch (447:30): [True: 4.94k, False: 1.64k]
Branch (447:30): [True: 4.60k, False: 2.30k]
Branch (447:30): [True: 9.20k, False: 2.30k]
Branch (447:30): [True: 5.75k, False: 1.91k]
Branch (447:30): [True: 8.75k, False: 2.18k]
|
448 | 57.9k | m_val[i] ^= a.m_val[i]; |
449 | 57.9k | } |
450 | 21.7k | return *this; |
451 | 21.7k | } _ZN13bitset_detail14MultiIntBitSetItLj1EEeOERKS1_ Line | Count | Source | 446 | 1.80k | { | 447 | 3.61k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 1.80k, False: 1.80k]
| 448 | 1.80k | m_val[i] ^= a.m_val[i]; | 449 | 1.80k | } | 450 | 1.80k | return *this; | 451 | 1.80k | } |
_ZN13bitset_detail14MultiIntBitSetItLj2EEeOERKS1_ Line | Count | Source | 446 | 1.64k | { | 447 | 4.94k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 3.29k, False: 1.64k]
| 448 | 3.29k | m_val[i] ^= a.m_val[i]; | 449 | 3.29k | } | 450 | 1.64k | return *this; | 451 | 1.64k | } |
_ZN13bitset_detail14MultiIntBitSetItLj3EEeOERKS1_ Line | Count | Source | 446 | 1.58k | { | 447 | 6.35k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 4.76k, False: 1.58k]
| 448 | 4.76k | m_val[i] ^= a.m_val[i]; | 449 | 4.76k | } | 450 | 1.58k | return *this; | 451 | 1.58k | } |
_ZN13bitset_detail14MultiIntBitSetImLj1EEeOERKS1_ Line | Count | Source | 446 | 2.12k | { | 447 | 4.24k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 2.12k, False: 2.12k]
| 448 | 2.12k | m_val[i] ^= a.m_val[i]; | 449 | 2.12k | } | 450 | 2.12k | return *this; | 451 | 2.12k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj2EEeOERKS1_ Line | Count | Source | 446 | 2.12k | { | 447 | 6.36k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 4.24k, False: 2.12k]
| 448 | 4.24k | m_val[i] ^= a.m_val[i]; | 449 | 4.24k | } | 450 | 2.12k | return *this; | 451 | 2.12k | } |
_ZN13bitset_detail14MultiIntBitSetItLj4EEeOERKS1_ Line | Count | Source | 446 | 2.12k | { | 447 | 10.6k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 8.49k, False: 2.12k]
| 448 | 8.49k | m_val[i] ^= a.m_val[i]; | 449 | 8.49k | } | 450 | 2.12k | return *this; | 451 | 2.12k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj3EEeOERKS1_ Line | Count | Source | 446 | 1.64k | { | 447 | 6.59k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 4.94k, False: 1.64k]
| 448 | 4.94k | m_val[i] ^= a.m_val[i]; | 449 | 4.94k | } | 450 | 1.64k | return *this; | 451 | 1.64k | } |
_ZN13bitset_detail14MultiIntBitSetImLj2EEeOERKS1_ Line | Count | Source | 446 | 2.30k | { | 447 | 6.90k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 4.60k, False: 2.30k]
| 448 | 4.60k | m_val[i] ^= a.m_val[i]; | 449 | 4.60k | } | 450 | 2.30k | return *this; | 451 | 2.30k | } |
_ZN13bitset_detail14MultiIntBitSetIjLj4EEeOERKS1_ Line | Count | Source | 446 | 2.30k | { | 447 | 11.5k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 9.20k, False: 2.30k]
| 448 | 9.20k | m_val[i] ^= a.m_val[i]; | 449 | 9.20k | } | 450 | 2.30k | return *this; | 451 | 2.30k | } |
_ZN13bitset_detail14MultiIntBitSetImLj3EEeOERKS1_ Line | Count | Source | 446 | 1.91k | { | 447 | 7.66k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 5.75k, False: 1.91k]
| 448 | 5.75k | m_val[i] ^= a.m_val[i]; | 449 | 5.75k | } | 450 | 1.91k | return *this; | 451 | 1.91k | } |
_ZN13bitset_detail14MultiIntBitSetImLj4EEeOERKS1_ Line | Count | Source | 446 | 2.18k | { | 447 | 10.9k | for (unsigned i = 0; i < N; ++i) { Branch (447:30): [True: 8.75k, False: 2.18k]
| 448 | 8.75k | m_val[i] ^= a.m_val[i]; | 449 | 8.75k | } | 450 | 2.18k | return *this; | 451 | 2.18k | } |
|
452 | | /** Check whether the intersection between two sets is non-empty. */ |
453 | | constexpr bool Overlaps(const MultiIntBitSet& a) const noexcept |
454 | 2.41M | { |
455 | 6.89M | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 3.35k, False: 1.10k]
Branch (455:30): [True: 8.46k, False: 1.79k]
Branch (455:30): [True: 20.8k, False: 3.82k]
Branch (455:30): [True: 10.3k, False: 3.00k]
Branch (455:30): [True: 15.9k, False: 3.00k]
Branch (455:30): [True: 27.1k, False: 3.00k]
Branch (455:30): [True: 24.5k, False: 3.79k]
Branch (455:30): [True: 4.48M, False: 2.14M]
Branch (455:30): [True: 37.8k, False: 4.11k]
Branch (455:30): [True: 28.0k, False: 4.85k]
Branch (455:30): [True: 41.1k, False: 4.23k]
|
456 | 4.70M | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 2.24k, False: 1.10k]
Branch (456:17): [True: 3.84k, False: 4.62k]
Branch (456:17): [True: 5.51k, False: 15.3k]
Branch (456:17): [True: 7.31k, False: 3.00k]
Branch (456:17): [True: 7.31k, False: 8.62k]
Branch (456:17): [True: 7.31k, False: 19.8k]
Branch (456:17): [True: 7.39k, False: 17.1k]
Branch (456:17): [True: 158k, False: 4.33M]
Branch (456:17): [True: 10.1k, False: 27.7k]
Branch (456:17): [True: 8.29k, False: 19.8k]
Branch (456:17): [True: 10.6k, False: 30.4k]
|
457 | 4.70M | } |
458 | 2.18M | return false; |
459 | 2.41M | } _ZNK13bitset_detail14MultiIntBitSetItLj1EE8OverlapsERKS1_ Line | Count | Source | 454 | 3.35k | { | 455 | 4.46k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 3.35k, False: 1.10k]
| 456 | 3.35k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 2.24k, False: 1.10k]
| 457 | 3.35k | } | 458 | 1.10k | return false; | 459 | 3.35k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE8OverlapsERKS1_ Line | Count | Source | 454 | 5.63k | { | 455 | 10.2k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 8.46k, False: 1.79k]
| 456 | 8.46k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 3.84k, False: 4.62k]
| 457 | 8.46k | } | 458 | 1.79k | return false; | 459 | 5.63k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE8OverlapsERKS1_ Line | Count | Source | 454 | 9.33k | { | 455 | 24.6k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 20.8k, False: 3.82k]
| 456 | 20.8k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 5.51k, False: 15.3k]
| 457 | 20.8k | } | 458 | 3.82k | return false; | 459 | 9.33k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE8OverlapsERKS1_ Line | Count | Source | 454 | 10.3k | { | 455 | 13.3k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 10.3k, False: 3.00k]
| 456 | 10.3k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 7.31k, False: 3.00k]
| 457 | 10.3k | } | 458 | 3.00k | return false; | 459 | 10.3k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE8OverlapsERKS1_ Line | Count | Source | 454 | 10.3k | { | 455 | 18.9k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 15.9k, False: 3.00k]
| 456 | 15.9k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 7.31k, False: 8.62k]
| 457 | 15.9k | } | 458 | 3.00k | return false; | 459 | 10.3k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE8OverlapsERKS1_ Line | Count | Source | 454 | 10.3k | { | 455 | 30.1k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 27.1k, False: 3.00k]
| 456 | 27.1k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 7.31k, False: 19.8k]
| 457 | 27.1k | } | 458 | 3.00k | return false; | 459 | 10.3k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE8OverlapsERKS1_ Line | Count | Source | 454 | 11.1k | { | 455 | 28.3k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 24.5k, False: 3.79k]
| 456 | 24.5k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 7.39k, False: 17.1k]
| 457 | 24.5k | } | 458 | 3.79k | return false; | 459 | 11.1k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE8OverlapsERKS1_ Line | Count | Source | 454 | 2.30M | { | 455 | 6.63M | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 4.48M, False: 2.14M]
| 456 | 4.48M | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 158k, False: 4.33M]
| 457 | 4.48M | } | 458 | 2.14M | return false; | 459 | 2.30M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE8OverlapsERKS1_ Line | Count | Source | 454 | 14.2k | { | 455 | 41.9k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 37.8k, False: 4.11k]
| 456 | 37.8k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 10.1k, False: 27.7k]
| 457 | 37.8k | } | 458 | 4.11k | return false; | 459 | 14.2k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE8OverlapsERKS1_ Line | Count | Source | 454 | 13.1k | { | 455 | 32.9k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 28.0k, False: 4.85k]
| 456 | 28.0k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 8.29k, False: 19.8k]
| 457 | 28.0k | } | 458 | 4.85k | return false; | 459 | 13.1k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE8OverlapsERKS1_ Line | Count | Source | 454 | 14.9k | { | 455 | 45.3k | for (unsigned i = 0; i < N; ++i) { Branch (455:30): [True: 41.1k, False: 4.23k]
| 456 | 41.1k | if (m_val[i] & a.m_val[i]) return true; Branch (456:17): [True: 10.6k, False: 30.4k]
| 457 | 41.1k | } | 458 | 4.23k | return false; | 459 | 14.9k | } |
|
460 | | /** Return an object with the binary AND between respective bits from a and b. */ |
461 | | friend constexpr MultiIntBitSet operator&(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept |
462 | 108k | { |
463 | 108k | MultiIntBitSet r; |
464 | 343k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 1.75k, False: 1.75k]
Branch (464:30): [True: 3.46k, False: 1.73k]
Branch (464:30): [True: 5.42k, False: 1.80k]
Branch (464:30): [True: 2.98k, False: 2.98k]
Branch (464:30): [True: 5.96k, False: 2.98k]
Branch (464:30): [True: 11.9k, False: 2.98k]
Branch (464:30): [True: 5.26k, False: 1.75k]
Branch (464:30): [True: 169k, False: 84.7k]
Branch (464:30): [True: 8.59k, False: 2.14k]
Branch (464:30): [True: 8.26k, False: 2.75k]
Branch (464:30): [True: 11.6k, False: 2.92k]
|
465 | 234k | r.m_val[i] = a.m_val[i] & b.m_val[i]; |
466 | 234k | } |
467 | 108k | return r; |
468 | 108k | } _ZN13bitset_detailanERKNS_14MultiIntBitSetItLj1EEES3_ Line | Count | Source | 462 | 1.75k | { | 463 | 1.75k | MultiIntBitSet r; | 464 | 3.51k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 1.75k, False: 1.75k]
| 465 | 1.75k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 1.75k | } | 467 | 1.75k | return r; | 468 | 1.75k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetItLj2EEES3_ Line | Count | Source | 462 | 1.73k | { | 463 | 1.73k | MultiIntBitSet r; | 464 | 5.19k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 3.46k, False: 1.73k]
| 465 | 3.46k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 3.46k | } | 467 | 1.73k | return r; | 468 | 1.73k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetItLj3EEES3_ Line | Count | Source | 462 | 1.80k | { | 463 | 1.80k | MultiIntBitSet r; | 464 | 7.22k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 5.42k, False: 1.80k]
| 465 | 5.42k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 5.42k | } | 467 | 1.80k | return r; | 468 | 1.80k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetImLj1EEES3_ Line | Count | Source | 462 | 2.98k | { | 463 | 2.98k | MultiIntBitSet r; | 464 | 5.96k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 2.98k, False: 2.98k]
| 465 | 2.98k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 2.98k | } | 467 | 2.98k | return r; | 468 | 2.98k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetIjLj2EEES3_ Line | Count | Source | 462 | 2.98k | { | 463 | 2.98k | MultiIntBitSet r; | 464 | 8.94k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 5.96k, False: 2.98k]
| 465 | 5.96k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 5.96k | } | 467 | 2.98k | return r; | 468 | 2.98k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetItLj4EEES3_ Line | Count | Source | 462 | 2.98k | { | 463 | 2.98k | MultiIntBitSet r; | 464 | 14.9k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 11.9k, False: 2.98k]
| 465 | 11.9k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 11.9k | } | 467 | 2.98k | return r; | 468 | 2.98k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetIjLj3EEES3_ Line | Count | Source | 462 | 1.75k | { | 463 | 1.75k | MultiIntBitSet r; | 464 | 7.01k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 5.26k, False: 1.75k]
| 465 | 5.26k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 5.26k | } | 467 | 1.75k | return r; | 468 | 1.75k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetImLj2EEES3_ Line | Count | Source | 462 | 84.7k | { | 463 | 84.7k | MultiIntBitSet r; | 464 | 254k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 169k, False: 84.7k]
| 465 | 169k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 169k | } | 467 | 84.7k | return r; | 468 | 84.7k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetIjLj4EEES3_ Line | Count | Source | 462 | 2.14k | { | 463 | 2.14k | MultiIntBitSet r; | 464 | 10.7k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 8.59k, False: 2.14k]
| 465 | 8.59k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 8.59k | } | 467 | 2.14k | return r; | 468 | 2.14k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetImLj3EEES3_ Line | Count | Source | 462 | 2.75k | { | 463 | 2.75k | MultiIntBitSet r; | 464 | 11.0k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 8.26k, False: 2.75k]
| 465 | 8.26k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 8.26k | } | 467 | 2.75k | return r; | 468 | 2.75k | } |
_ZN13bitset_detailanERKNS_14MultiIntBitSetImLj4EEES3_ Line | Count | Source | 462 | 2.92k | { | 463 | 2.92k | MultiIntBitSet r; | 464 | 14.6k | for (unsigned i = 0; i < N; ++i) { Branch (464:30): [True: 11.6k, False: 2.92k]
| 465 | 11.6k | r.m_val[i] = a.m_val[i] & b.m_val[i]; | 466 | 11.6k | } | 467 | 2.92k | return r; | 468 | 2.92k | } |
|
469 | | /** Return an object with the binary OR between respective bits from a and b. */ |
470 | | friend constexpr MultiIntBitSet operator|(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept |
471 | 905k | { |
472 | 905k | MultiIntBitSet r; |
473 | 2.73M | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 2.45k, False: 2.45k]
Branch (473:30): [True: 4.20k, False: 2.10k]
Branch (473:30): [True: 4.94k, False: 1.64k]
Branch (473:30): [True: 1.75k, False: 1.75k]
Branch (473:30): [True: 3.51k, False: 1.75k]
Branch (473:30): [True: 7.02k, False: 1.75k]
Branch (473:30): [True: 6.71k, False: 2.23k]
Branch (473:30): [True: 1.76M, False: 882k]
Branch (473:30): [True: 13.1k, False: 3.27k]
Branch (473:30): [True: 7.42k, False: 2.47k]
Branch (473:30): [True: 10.7k, False: 2.69k]
|
474 | 1.82M | r.m_val[i] = a.m_val[i] | b.m_val[i]; |
475 | 1.82M | } |
476 | 905k | return r; |
477 | 905k | } _ZN13bitset_detailorERKNS_14MultiIntBitSetItLj1EEES3_ Line | Count | Source | 471 | 2.45k | { | 472 | 2.45k | MultiIntBitSet r; | 473 | 4.91k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 2.45k, False: 2.45k]
| 474 | 2.45k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 2.45k | } | 476 | 2.45k | return r; | 477 | 2.45k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetItLj2EEES3_ Line | Count | Source | 471 | 2.10k | { | 472 | 2.10k | MultiIntBitSet r; | 473 | 6.30k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 4.20k, False: 2.10k]
| 474 | 4.20k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 4.20k | } | 476 | 2.10k | return r; | 477 | 2.10k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetItLj3EEES3_ Line | Count | Source | 471 | 1.64k | { | 472 | 1.64k | MultiIntBitSet r; | 473 | 6.59k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 4.94k, False: 1.64k]
| 474 | 4.94k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 4.94k | } | 476 | 1.64k | return r; | 477 | 1.64k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetImLj1EEES3_ Line | Count | Source | 471 | 1.75k | { | 472 | 1.75k | MultiIntBitSet r; | 473 | 3.51k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 1.75k, False: 1.75k]
| 474 | 1.75k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 1.75k | } | 476 | 1.75k | return r; | 477 | 1.75k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetIjLj2EEES3_ Line | Count | Source | 471 | 1.75k | { | 472 | 1.75k | MultiIntBitSet r; | 473 | 5.26k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 3.51k, False: 1.75k]
| 474 | 3.51k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 3.51k | } | 476 | 1.75k | return r; | 477 | 1.75k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetItLj4EEES3_ Line | Count | Source | 471 | 1.75k | { | 472 | 1.75k | MultiIntBitSet r; | 473 | 8.78k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 7.02k, False: 1.75k]
| 474 | 7.02k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 7.02k | } | 476 | 1.75k | return r; | 477 | 1.75k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetIjLj3EEES3_ Line | Count | Source | 471 | 2.23k | { | 472 | 2.23k | MultiIntBitSet r; | 473 | 8.95k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 6.71k, False: 2.23k]
| 474 | 6.71k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 6.71k | } | 476 | 2.23k | return r; | 477 | 2.23k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetImLj2EEES3_ Line | Count | Source | 471 | 882k | { | 472 | 882k | MultiIntBitSet r; | 473 | 2.64M | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 1.76M, False: 882k]
| 474 | 1.76M | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 1.76M | } | 476 | 882k | return r; | 477 | 882k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetIjLj4EEES3_ Line | Count | Source | 471 | 3.27k | { | 472 | 3.27k | MultiIntBitSet r; | 473 | 16.3k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 13.1k, False: 3.27k]
| 474 | 13.1k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 13.1k | } | 476 | 3.27k | return r; | 477 | 3.27k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetImLj3EEES3_ Line | Count | Source | 471 | 2.47k | { | 472 | 2.47k | MultiIntBitSet r; | 473 | 9.90k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 7.42k, False: 2.47k]
| 474 | 7.42k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 7.42k | } | 476 | 2.47k | return r; | 477 | 2.47k | } |
_ZN13bitset_detailorERKNS_14MultiIntBitSetImLj4EEES3_ Line | Count | Source | 471 | 2.69k | { | 472 | 2.69k | MultiIntBitSet r; | 473 | 13.4k | for (unsigned i = 0; i < N; ++i) { Branch (473:30): [True: 10.7k, False: 2.69k]
| 474 | 10.7k | r.m_val[i] = a.m_val[i] | b.m_val[i]; | 475 | 10.7k | } | 476 | 2.69k | return r; | 477 | 2.69k | } |
|
478 | | /** Return an object with the binary AND NOT between respective bits from a and b. */ |
479 | | friend constexpr MultiIntBitSet operator-(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept |
480 | 31.4M | { |
481 | 31.4M | MultiIntBitSet r; |
482 | 94.3M | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 1.12k, False: 1.12k]
Branch (482:30): [True: 3.80k, False: 1.90k]
Branch (482:30): [True: 3.18k, False: 1.06k]
Branch (482:30): [True: 2.36k, False: 2.36k]
Branch (482:30): [True: 4.72k, False: 2.36k]
Branch (482:30): [True: 9.44k, False: 2.36k]
Branch (482:30): [True: 6.75k, False: 2.25k]
Branch (482:30): [True: 62.8M, False: 31.4M]
Branch (482:30): [True: 14.0k, False: 3.50k]
Branch (482:30): [True: 10.8k, False: 3.61k]
Branch (482:30): [True: 7.99k, False: 1.99k]
|
483 | 62.9M | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; |
484 | 62.9M | } |
485 | 31.4M | return r; |
486 | 31.4M | } _ZN13bitset_detailmiERKNS_14MultiIntBitSetItLj1EEES3_ Line | Count | Source | 480 | 1.12k | { | 481 | 1.12k | MultiIntBitSet r; | 482 | 2.25k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 1.12k, False: 1.12k]
| 483 | 1.12k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 1.12k | } | 485 | 1.12k | return r; | 486 | 1.12k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetItLj2EEES3_ Line | Count | Source | 480 | 1.90k | { | 481 | 1.90k | MultiIntBitSet r; | 482 | 5.70k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 3.80k, False: 1.90k]
| 483 | 3.80k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 3.80k | } | 485 | 1.90k | return r; | 486 | 1.90k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetItLj3EEES3_ Line | Count | Source | 480 | 1.06k | { | 481 | 1.06k | MultiIntBitSet r; | 482 | 4.25k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 3.18k, False: 1.06k]
| 483 | 3.18k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 3.18k | } | 485 | 1.06k | return r; | 486 | 1.06k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetImLj1EEES3_ Line | Count | Source | 480 | 2.36k | { | 481 | 2.36k | MultiIntBitSet r; | 482 | 4.72k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 2.36k, False: 2.36k]
| 483 | 2.36k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 2.36k | } | 485 | 2.36k | return r; | 486 | 2.36k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetIjLj2EEES3_ Line | Count | Source | 480 | 2.36k | { | 481 | 2.36k | MultiIntBitSet r; | 482 | 7.08k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 4.72k, False: 2.36k]
| 483 | 4.72k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 4.72k | } | 485 | 2.36k | return r; | 486 | 2.36k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetItLj4EEES3_ Line | Count | Source | 480 | 2.36k | { | 481 | 2.36k | MultiIntBitSet r; | 482 | 11.8k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 9.44k, False: 2.36k]
| 483 | 9.44k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 9.44k | } | 485 | 2.36k | return r; | 486 | 2.36k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetIjLj3EEES3_ Line | Count | Source | 480 | 2.25k | { | 481 | 2.25k | MultiIntBitSet r; | 482 | 9.00k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 6.75k, False: 2.25k]
| 483 | 6.75k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 6.75k | } | 485 | 2.25k | return r; | 486 | 2.25k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetImLj2EEES3_ Line | Count | Source | 480 | 31.4M | { | 481 | 31.4M | MultiIntBitSet r; | 482 | 94.2M | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 62.8M, False: 31.4M]
| 483 | 62.8M | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 62.8M | } | 485 | 31.4M | return r; | 486 | 31.4M | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetIjLj4EEES3_ Line | Count | Source | 480 | 3.50k | { | 481 | 3.50k | MultiIntBitSet r; | 482 | 17.5k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 14.0k, False: 3.50k]
| 483 | 14.0k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 14.0k | } | 485 | 3.50k | return r; | 486 | 3.50k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetImLj3EEES3_ Line | Count | Source | 480 | 3.61k | { | 481 | 3.61k | MultiIntBitSet r; | 482 | 14.4k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 10.8k, False: 3.61k]
| 483 | 10.8k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 10.8k | } | 485 | 3.61k | return r; | 486 | 3.61k | } |
_ZN13bitset_detailmiERKNS_14MultiIntBitSetImLj4EEES3_ Line | Count | Source | 480 | 1.99k | { | 481 | 1.99k | MultiIntBitSet r; | 482 | 9.99k | for (unsigned i = 0; i < N; ++i) { Branch (482:30): [True: 7.99k, False: 1.99k]
| 483 | 7.99k | r.m_val[i] = a.m_val[i] & ~b.m_val[i]; | 484 | 7.99k | } | 485 | 1.99k | return r; | 486 | 1.99k | } |
|
487 | | /** Return an object with the binary XOR between respective bits from a and b. */ |
488 | | friend constexpr MultiIntBitSet operator^(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept |
489 | 21.7k | { |
490 | 21.7k | MultiIntBitSet r; |
491 | 79.7k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 1.54k, False: 1.54k]
Branch (491:30): [True: 3.67k, False: 1.83k]
Branch (491:30): [True: 4.95k, False: 1.65k]
Branch (491:30): [True: 2.26k, False: 2.26k]
Branch (491:30): [True: 4.52k, False: 2.26k]
Branch (491:30): [True: 9.05k, False: 2.26k]
Branch (491:30): [True: 5.13k, False: 1.71k]
Branch (491:30): [True: 3.97k, False: 1.98k]
Branch (491:30): [True: 7.95k, False: 1.98k]
Branch (491:30): [True: 6.42k, False: 2.14k]
Branch (491:30): [True: 8.45k, False: 2.11k]
|
492 | 57.9k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; |
493 | 57.9k | } |
494 | 21.7k | return r; |
495 | 21.7k | } _ZN13bitset_detaileoERKNS_14MultiIntBitSetItLj1EEES3_ Line | Count | Source | 489 | 1.54k | { | 490 | 1.54k | MultiIntBitSet r; | 491 | 3.08k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 1.54k, False: 1.54k]
| 492 | 1.54k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 1.54k | } | 494 | 1.54k | return r; | 495 | 1.54k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetItLj2EEES3_ Line | Count | Source | 489 | 1.83k | { | 490 | 1.83k | MultiIntBitSet r; | 491 | 5.51k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 3.67k, False: 1.83k]
| 492 | 3.67k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 3.67k | } | 494 | 1.83k | return r; | 495 | 1.83k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetItLj3EEES3_ Line | Count | Source | 489 | 1.65k | { | 490 | 1.65k | MultiIntBitSet r; | 491 | 6.60k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 4.95k, False: 1.65k]
| 492 | 4.95k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 4.95k | } | 494 | 1.65k | return r; | 495 | 1.65k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetImLj1EEES3_ Line | Count | Source | 489 | 2.26k | { | 490 | 2.26k | MultiIntBitSet r; | 491 | 4.52k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 2.26k, False: 2.26k]
| 492 | 2.26k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 2.26k | } | 494 | 2.26k | return r; | 495 | 2.26k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetIjLj2EEES3_ Line | Count | Source | 489 | 2.26k | { | 490 | 2.26k | MultiIntBitSet r; | 491 | 6.79k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 4.52k, False: 2.26k]
| 492 | 4.52k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 4.52k | } | 494 | 2.26k | return r; | 495 | 2.26k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetItLj4EEES3_ Line | Count | Source | 489 | 2.26k | { | 490 | 2.26k | MultiIntBitSet r; | 491 | 11.3k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 9.05k, False: 2.26k]
| 492 | 9.05k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 9.05k | } | 494 | 2.26k | return r; | 495 | 2.26k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetIjLj3EEES3_ Line | Count | Source | 489 | 1.71k | { | 490 | 1.71k | MultiIntBitSet r; | 491 | 6.85k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 5.13k, False: 1.71k]
| 492 | 5.13k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 5.13k | } | 494 | 1.71k | return r; | 495 | 1.71k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetImLj2EEES3_ Line | Count | Source | 489 | 1.98k | { | 490 | 1.98k | MultiIntBitSet r; | 491 | 5.96k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 3.97k, False: 1.98k]
| 492 | 3.97k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 3.97k | } | 494 | 1.98k | return r; | 495 | 1.98k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetIjLj4EEES3_ Line | Count | Source | 489 | 1.98k | { | 490 | 1.98k | MultiIntBitSet r; | 491 | 9.94k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 7.95k, False: 1.98k]
| 492 | 7.95k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 7.95k | } | 494 | 1.98k | return r; | 495 | 1.98k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetImLj3EEES3_ Line | Count | Source | 489 | 2.14k | { | 490 | 2.14k | MultiIntBitSet r; | 491 | 8.57k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 6.42k, False: 2.14k]
| 492 | 6.42k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 6.42k | } | 494 | 2.14k | return r; | 495 | 2.14k | } |
_ZN13bitset_detaileoERKNS_14MultiIntBitSetImLj4EEES3_ Line | Count | Source | 489 | 2.11k | { | 490 | 2.11k | MultiIntBitSet r; | 491 | 10.5k | for (unsigned i = 0; i < N; ++i) { Branch (491:30): [True: 8.45k, False: 2.11k]
| 492 | 8.45k | r.m_val[i] = a.m_val[i] ^ b.m_val[i]; | 493 | 8.45k | } | 494 | 2.11k | return r; | 495 | 2.11k | } |
|
496 | | /** Check if bitset a is a superset of bitset b (= every 1 bit in b is also in a). */ |
497 | | constexpr bool IsSupersetOf(const MultiIntBitSet& a) const noexcept |
498 | 181k | { |
499 | 427k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 4.68k, False: 2.26k]
Branch (499:30): [True: 17.0k, False: 4.54k]
Branch (499:30): [True: 27.5k, False: 4.41k]
Branch (499:30): [True: 22.6k, False: 8.43k]
Branch (499:30): [True: 35.0k, False: 8.43k]
Branch (499:30): [True: 60.7k, False: 8.43k]
Branch (499:30): [True: 26.4k, False: 4.52k]
Branch (499:30): [True: 32.0k, False: 6.85k]
Branch (499:30): [True: 54.8k, False: 6.85k]
Branch (499:30): [True: 34.6k, False: 6.07k]
Branch (499:30): [True: 45.9k, False: 5.21k]
|
500 | 361k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 2.41k, False: 2.26k]
Branch (500:17): [True: 5.97k, False: 11.0k]
Branch (500:17): [True: 8.66k, False: 18.9k]
Branch (500:17): [True: 14.1k, False: 8.43k]
Branch (500:17): [True: 14.1k, False: 20.9k]
Branch (500:17): [True: 14.1k, False: 46.5k]
Branch (500:17): [True: 7.82k, False: 18.6k]
Branch (500:17): [True: 13.4k, False: 18.6k]
Branch (500:17): [True: 13.4k, False: 41.3k]
Branch (500:17): [True: 9.85k, False: 24.8k]
Branch (500:17): [True: 11.2k, False: 34.6k]
|
501 | 361k | } |
502 | 66.0k | return true; |
503 | 181k | } _ZNK13bitset_detail14MultiIntBitSetItLj1EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 4.68k | { | 499 | 6.95k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 4.68k, False: 2.26k]
| 500 | 4.68k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 2.41k, False: 2.26k]
| 501 | 4.68k | } | 502 | 2.26k | return true; | 503 | 4.68k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 10.5k | { | 499 | 21.5k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 17.0k, False: 4.54k]
| 500 | 17.0k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 5.97k, False: 11.0k]
| 501 | 17.0k | } | 502 | 4.54k | return true; | 503 | 10.5k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 13.0k | { | 499 | 31.9k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 27.5k, False: 4.41k]
| 500 | 27.5k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 8.66k, False: 18.9k]
| 501 | 27.5k | } | 502 | 4.41k | return true; | 503 | 13.0k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 22.6k | { | 499 | 31.0k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 22.6k, False: 8.43k]
| 500 | 22.6k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 14.1k, False: 8.43k]
| 501 | 22.6k | } | 502 | 8.43k | return true; | 503 | 22.6k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 22.6k | { | 499 | 43.5k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 35.0k, False: 8.43k]
| 500 | 35.0k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 14.1k, False: 20.9k]
| 501 | 35.0k | } | 502 | 8.43k | return true; | 503 | 22.6k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 22.6k | { | 499 | 69.1k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 60.7k, False: 8.43k]
| 500 | 60.7k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 14.1k, False: 46.5k]
| 501 | 60.7k | } | 502 | 8.43k | return true; | 503 | 22.6k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 12.3k | { | 499 | 30.9k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 26.4k, False: 4.52k]
| 500 | 26.4k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 7.82k, False: 18.6k]
| 501 | 26.4k | } | 502 | 4.52k | return true; | 503 | 12.3k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 20.3k | { | 499 | 38.9k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 32.0k, False: 6.85k]
| 500 | 32.0k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 13.4k, False: 18.6k]
| 501 | 32.0k | } | 502 | 6.85k | return true; | 503 | 20.3k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 20.3k | { | 499 | 61.6k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 54.8k, False: 6.85k]
| 500 | 54.8k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 13.4k, False: 41.3k]
| 501 | 54.8k | } | 502 | 6.85k | return true; | 503 | 20.3k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 15.9k | { | 499 | 40.7k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 34.6k, False: 6.07k]
| 500 | 34.6k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 9.85k, False: 24.8k]
| 501 | 34.6k | } | 502 | 6.07k | return true; | 503 | 15.9k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE12IsSupersetOfERKS1_ Line | Count | Source | 498 | 16.4k | { | 499 | 51.1k | for (unsigned i = 0; i < N; ++i) { Branch (499:30): [True: 45.9k, False: 5.21k]
| 500 | 45.9k | if (a.m_val[i] & ~m_val[i]) return false; Branch (500:17): [True: 11.2k, False: 34.6k]
| 501 | 45.9k | } | 502 | 5.21k | return true; | 503 | 16.4k | } |
|
504 | | /** Check if bitset a is a subset of bitset b (= every 1 bit in a is also in b). */ |
505 | | constexpr bool IsSubsetOf(const MultiIntBitSet& a) const noexcept |
506 | 24.0M | { |
507 | 72.0M | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 4.68k, False: 2.26k]
Branch (507:30): [True: 17.0k, False: 4.54k]
Branch (507:30): [True: 27.5k, False: 4.41k]
Branch (507:30): [True: 22.6k, False: 8.43k]
Branch (507:30): [True: 35.0k, False: 8.43k]
Branch (507:30): [True: 60.7k, False: 8.43k]
Branch (507:30): [True: 26.4k, False: 4.52k]
Branch (507:30): [True: 47.7M, False: 23.8M]
Branch (507:30): [True: 54.8k, False: 6.85k]
Branch (507:30): [True: 34.6k, False: 6.07k]
Branch (507:30): [True: 45.9k, False: 5.21k]
|
508 | 48.1M | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 2.41k, False: 2.26k]
Branch (508:17): [True: 5.97k, False: 11.0k]
Branch (508:17): [True: 8.66k, False: 18.9k]
Branch (508:17): [True: 14.1k, False: 8.43k]
Branch (508:17): [True: 14.1k, False: 20.9k]
Branch (508:17): [True: 14.1k, False: 46.5k]
Branch (508:17): [True: 7.82k, False: 18.6k]
Branch (508:17): [True: 13.4k, False: 47.7M]
Branch (508:17): [True: 13.4k, False: 41.3k]
Branch (508:17): [True: 9.85k, False: 24.8k]
Branch (508:17): [True: 11.2k, False: 34.6k]
|
509 | 48.1M | } |
510 | 23.9M | return true; |
511 | 24.0M | } _ZNK13bitset_detail14MultiIntBitSetItLj1EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 4.68k | { | 507 | 6.95k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 4.68k, False: 2.26k]
| 508 | 4.68k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 2.41k, False: 2.26k]
| 509 | 4.68k | } | 510 | 2.26k | return true; | 511 | 4.68k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj2EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 10.5k | { | 507 | 21.5k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 17.0k, False: 4.54k]
| 508 | 17.0k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 5.97k, False: 11.0k]
| 509 | 17.0k | } | 510 | 4.54k | return true; | 511 | 10.5k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj3EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 13.0k | { | 507 | 31.9k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 27.5k, False: 4.41k]
| 508 | 27.5k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 8.66k, False: 18.9k]
| 509 | 27.5k | } | 510 | 4.41k | return true; | 511 | 13.0k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj1EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 22.6k | { | 507 | 31.0k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 22.6k, False: 8.43k]
| 508 | 22.6k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 14.1k, False: 8.43k]
| 509 | 22.6k | } | 510 | 8.43k | return true; | 511 | 22.6k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj2EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 22.6k | { | 507 | 43.5k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 35.0k, False: 8.43k]
| 508 | 35.0k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 14.1k, False: 20.9k]
| 509 | 35.0k | } | 510 | 8.43k | return true; | 511 | 22.6k | } |
_ZNK13bitset_detail14MultiIntBitSetItLj4EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 22.6k | { | 507 | 69.1k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 60.7k, False: 8.43k]
| 508 | 60.7k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 14.1k, False: 46.5k]
| 509 | 60.7k | } | 510 | 8.43k | return true; | 511 | 22.6k | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj3EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 12.3k | { | 507 | 30.9k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 26.4k, False: 4.52k]
| 508 | 26.4k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 7.82k, False: 18.6k]
| 509 | 26.4k | } | 510 | 4.52k | return true; | 511 | 12.3k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj2EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 23.8M | { | 507 | 71.6M | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 47.7M, False: 23.8M]
| 508 | 47.7M | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 13.4k, False: 47.7M]
| 509 | 47.7M | } | 510 | 23.8M | return true; | 511 | 23.8M | } |
_ZNK13bitset_detail14MultiIntBitSetIjLj4EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 20.3k | { | 507 | 61.6k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 54.8k, False: 6.85k]
| 508 | 54.8k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 13.4k, False: 41.3k]
| 509 | 54.8k | } | 510 | 6.85k | return true; | 511 | 20.3k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj3EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 15.9k | { | 507 | 40.7k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 34.6k, False: 6.07k]
| 508 | 34.6k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 9.85k, False: 24.8k]
| 509 | 34.6k | } | 510 | 6.07k | return true; | 511 | 15.9k | } |
_ZNK13bitset_detail14MultiIntBitSetImLj4EE10IsSubsetOfERKS1_ Line | Count | Source | 506 | 16.4k | { | 507 | 51.1k | for (unsigned i = 0; i < N; ++i) { Branch (507:30): [True: 45.9k, False: 5.21k]
| 508 | 45.9k | if (m_val[i] & ~a.m_val[i]) return false; Branch (508:17): [True: 11.2k, False: 34.6k]
| 509 | 45.9k | } | 510 | 5.21k | return true; | 511 | 16.4k | } |
|
512 | | /** Check if bitset a and bitset b are identical. */ |
513 | 69.3M | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; _ZN13bitset_detaileqERKNS_14MultiIntBitSetItLj1EEES3_ Line | Count | Source | 513 | 3.79k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetItLj2EEES3_ Line | Count | Source | 513 | 4.18k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetItLj3EEES3_ Line | Count | Source | 513 | 4.82k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetImLj1EEES3_ Line | Count | Source | 513 | 4.66k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetIjLj2EEES3_ Line | Count | Source | 513 | 4.66k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetItLj4EEES3_ Line | Count | Source | 513 | 4.66k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetIjLj3EEES3_ Line | Count | Source | 513 | 6.41k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetImLj2EEES3_ Line | Count | Source | 513 | 69.2M | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetIjLj4EEES3_ Line | Count | Source | 513 | 8.47k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetImLj3EEES3_ Line | Count | Source | 513 | 9.29k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
_ZN13bitset_detaileqERKNS_14MultiIntBitSetImLj4EEES3_ Line | Count | Source | 513 | 7.42k | friend constexpr bool operator==(const MultiIntBitSet& a, const MultiIntBitSet& b) noexcept = default; |
|
514 | | /** Swap two bitsets. */ |
515 | 23.4k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); }_ZN13bitset_detail4swapERNS_14MultiIntBitSetItLj1EEES2_ Line | Count | Source | 515 | 2.02k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetItLj2EEES2_ Line | Count | Source | 515 | 1.80k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetItLj3EEES2_ Line | Count | Source | 515 | 1.64k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetImLj1EEES2_ Line | Count | Source | 515 | 1.94k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetIjLj2EEES2_ Line | Count | Source | 515 | 1.94k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetItLj4EEES2_ Line | Count | Source | 515 | 1.94k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetIjLj3EEES2_ Line | Count | Source | 515 | 2.07k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetImLj2EEES2_ Line | Count | Source | 515 | 2.94k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetIjLj4EEES2_ Line | Count | Source | 515 | 2.94k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetImLj3EEES2_ Line | Count | Source | 515 | 2.05k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
_ZN13bitset_detail4swapERNS_14MultiIntBitSetImLj4EEES2_ Line | Count | Source | 515 | 2.16k | friend constexpr void swap(MultiIntBitSet& a, MultiIntBitSet& b) noexcept { std::swap(a.m_val, b.m_val); } |
|
516 | | }; |
517 | | |
518 | | } // namespace bitset_detail |
519 | | |
520 | | // BitSet dispatches to IntBitSet or MultiIntBitSet as appropriate for the requested minimum number |
521 | | // of bits. Use IntBitSet up to 32-bit, or up to 64-bit on 64-bit platforms; above that, use a |
522 | | // MultiIntBitSet of size_t. |
523 | | template<unsigned BITS> |
524 | | using BitSet = std::conditional_t<(BITS <= 32), bitset_detail::IntBitSet<uint32_t>, |
525 | | std::conditional_t<(BITS <= std::numeric_limits<size_t>::digits), bitset_detail::IntBitSet<size_t>, |
526 | | bitset_detail::MultiIntBitSet<size_t, CeilDiv(BITS, size_t{std::numeric_limits<size_t>::digits})>>>; |
527 | | |
528 | | #endif // BITCOIN_UTIL_BITSET_H |