summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/RoaringBitmap/roaring/clz_compat.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/RoaringBitmap/roaring/clz_compat.go')
-rw-r--r--vendor/github.com/RoaringBitmap/roaring/clz_compat.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/vendor/github.com/RoaringBitmap/roaring/clz_compat.go b/vendor/github.com/RoaringBitmap/roaring/clz_compat.go
new file mode 100644
index 0000000000..eeef4de35b
--- /dev/null
+++ b/vendor/github.com/RoaringBitmap/roaring/clz_compat.go
@@ -0,0 +1,36 @@
+// +build !go1.9
+
+package roaring
+
+// LeadingZeroBits returns the number of consecutive most significant zero
+// bits of x.
+func countLeadingZeros(i uint64) int {
+ if i == 0 {
+ return 64
+ }
+ n := 1
+ x := uint32(i >> 32)
+ if x == 0 {
+ n += 32
+ x = uint32(i)
+ }
+ if (x >> 16) == 0 {
+ n += 16
+ x <<= 16
+ }
+ if (x >> 24) == 0 {
+ n += 8
+ x <<= 8
+ }
+ if x>>28 == 0 {
+ n += 4
+ x <<= 4
+ }
+ if x>>30 == 0 {
+ n += 2
+ x <<= 2
+
+ }
+ n -= int(x >> 31)
+ return n
+}