10static inline int __builtin_clz(
unsigned x) {
12 _BitScanReverse(&r, x);
20 for (
auto &bucket : buckets)
42static inline unsigned leading_zeroes_of_unsigned (
unsigned x) {
43 return x ? __builtin_clz (x) : sizeof (unsigned) * 8;
48 const unsigned diff = e ^ last_deleted;
49 const unsigned bucket = 32 - leading_zeroes_of_unsigned (diff);
50 buckets[bucket].push_back (e);
51 if (min_bucket > bucket)
53 if (max_bucket < bucket)
61 unsigned i = min_bucket;
65 std::vector<unsigned> &s = buckets[i];
73 const auto begin = std::begin (s);
74 const auto end = std::end (s);
75 auto q = std::begin (s);
77 for (
auto p = begin;
p != end; ++
p) {
78 const unsigned tmp = *
p;
85 for (
auto p = begin;
p != end; ++
p) {
88 const unsigned other = *
p;
89 const unsigned diff = other ^ res;
91 const unsigned j = 32 - leading_zeroes_of_unsigned (diff);
93 buckets[j].push_back (other);
100 if (i && max_bucket == i) {
101#ifndef CADICAL_NDEBUG
102 for (
unsigned j = i + 1; j < 33; j++)
112 buckets[0].pop_back ();
115 if (min_bucket == i) {
116#ifndef CADICAL_NDEBUG
117 for (
unsigned j = 0; j < i; j++)
121 min_bucket = std::min ((
int) (i + 1), 32);
134 for (
unsigned i = 0; i < 33; i++)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define CADICAL_assert(ignore)