...
1
2
3 package bitset
4
5 import "math/bits"
6
7 func popcntSlice(s []uint64) uint64 {
8 var cnt int
9 for _, x := range s {
10 cnt += bits.OnesCount64(x)
11 }
12 return uint64(cnt)
13 }
14
15 func popcntMaskSlice(s, m []uint64) uint64 {
16 var cnt int
17 for i := range s {
18 cnt += bits.OnesCount64(s[i] &^ m[i])
19 }
20 return uint64(cnt)
21 }
22
23 func popcntAndSlice(s, m []uint64) uint64 {
24 var cnt int
25 for i := range s {
26 cnt += bits.OnesCount64(s[i] & m[i])
27 }
28 return uint64(cnt)
29 }
30
31 func popcntOrSlice(s, m []uint64) uint64 {
32 var cnt int
33 for i := range s {
34 cnt += bits.OnesCount64(s[i] | m[i])
35 }
36 return uint64(cnt)
37 }
38
39 func popcntXorSlice(s, m []uint64) uint64 {
40 var cnt int
41 for i := range s {
42 cnt += bits.OnesCount64(s[i] ^ m[i])
43 }
44 return uint64(cnt)
45 }
46
View as plain text