go6502/visual/bitmap.go

33 lines
574 B
Go

package visual
type bitmap []uint64
const BITMAP_SHIFT = 6
const BITMAP_MASK = 63
func wordsForBits(bits uint) uint {
return bits/64 + 1
}
func newBitmap(bits uint) bitmap {
return make([]uint64, wordsForBits(bits))
}
func (b bitmap) clear() {
for i := range b {
b[i] = 0
}
}
func (b bitmap) set(index uint, state bool) {
if state {
b[index>>BITMAP_SHIFT] |= 1 << (index & BITMAP_MASK)
} else {
b[index>>BITMAP_SHIFT] &^= 1 << (index & BITMAP_MASK)
}
}
func (b bitmap) get(index uint) bool {
return (b[index>>BITMAP_SHIFT]>>(index&BITMAP_MASK))&1 > 0
}