Coverage Report

Created: 2026-08-25 19:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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