| 61 | } |
| 62 | |
| 63 | func fillArrayAND(container []uint16, bitmap1, bitmap2 []uint64) { |
| 64 | if len(bitmap1) != len(bitmap2) { |
| 65 | panic("array lengths don't match") |
| 66 | } |
| 67 | // TODO: rewrite in assembly |
| 68 | pos := 0 |
| 69 | for k := range bitmap1 { |
| 70 | bitset := bitmap1[k] & bitmap2[k] |
| 71 | for bitset != 0 { |
| 72 | t := bitset & -bitset |
| 73 | container[pos] = uint16((k*64 + int(popcount(t-1)))) |
| 74 | pos = pos + 1 |
| 75 | bitset ^= t |
| 76 | } |
| 77 | } |
| 78 | } |
| 79 | |
| 80 | func fillArrayANDNOT(container []uint16, bitmap1, bitmap2 []uint64) { |
| 81 | if len(bitmap1) != len(bitmap2) { |