+++ /dev/null
-package common
-
-import (
- "errors"
-)
-
-const bitLen = 32
-
-var (
- errIndexOutOfBounds = errors.New("index out of bounds error")
-)
-
-type BitMap struct {
- size uint32
- arr []int32
-}
-
-func NewBitMap(size uint32) *BitMap {
- obj := &BitMap{size: size}
- num := (size + bitLen - 1) / bitLen
- arr := make([]int32, num)
- obj.arr = arr
- return obj
-}
-
-func (b *BitMap) Set(index uint32) error {
- if index >= b.size {
- return errIndexOutOfBounds
- }
-
- arrIndex, bitIndex := index / bitLen, index % bitLen
- b.arr[arrIndex] |= (1 << bitIndex)
- return nil
-}
-
-func (b *BitMap) Clean(index uint32) error {
- if index >= b.size {
- return errIndexOutOfBounds
- }
-
- arrIndex, bitIndex := index / bitLen, index % bitLen
- b.arr[arrIndex] &= (^(1 << bitIndex))
- return nil
-}
-
-func (b *BitMap) Test(index uint32) (bool, error) {
- if index >= b.size {
- return false, errIndexOutOfBounds
- }
-
- arrIndex, bitIndex := index / bitLen, index % bitLen
- return b.arr[arrIndex] & (1 << bitIndex) != 0, nil
-}