From 30284c1b2b63c6bafb9757c7b1e2274aa60287d9 Mon Sep 17 00:00:00 2001 From: Will Fitzgerald Date: Mon, 28 Aug 2017 12:30:13 -0400 Subject: [PATCH] support for 1.9 bit counts --- popcnt_19.go | 45 ++++++++++++++++++++++++++++ popcnt_test.go => popcnt_cmp_test.go | 0 2 files changed, 45 insertions(+) create mode 100644 popcnt_19.go rename popcnt_test.go => popcnt_cmp_test.go (100%) diff --git a/popcnt_19.go b/popcnt_19.go new file mode 100644 index 0000000..fc8ff4f --- /dev/null +++ b/popcnt_19.go @@ -0,0 +1,45 @@ +// +build go1.9 + +package bitset + +import "math/bits" + +func popcntSlice(s []uint64) uint64 { + var cnt int + for _, x := range s { + cnt += bits.OnesCount64(x) + } + return uint64(cnt) +} + +func popcntMaskSlice(s, m []uint64) uint64 { + var cnt int + for i := range s { + cnt += bits.OnesCount64(s[i] &^ m[i]) + } + return uint64(cnt) +} + +func popcntAndSlice(s, m []uint64) uint64 { + var cnt int + for i := range s { + cnt += bits.OnesCount64(s[i] & m[i]) + } + return uint64(cnt) +} + +func popcntOrSlice(s, m []uint64) uint64 { + var cnt int + for i := range s { + cnt += bits.OnesCount64(s[i] | m[i]) + } + return uint64(cnt) +} + +func popcntXorSlice(s, m []uint64) uint64 { + var cnt int + for i := range s { + cnt += bits.OnesCount64(s[i] ^ m[i]) + } + return uint64(cnt) +} diff --git a/popcnt_test.go b/popcnt_cmp_test.go similarity index 100% rename from popcnt_test.go rename to popcnt_cmp_test.go