func (bm *bitmap) Unset(idx uint) {
	var nth = idx >> bitmapShift
	var bit = idx & ((1 << bitmapShift) - 1)
	bm[nth] &^= 1 << bit
	return
}
Unset marks the i'th bit to 0.
package hamt32
import (
	"fmt"
	"strings"
)
const bitmapShift uint = 5
const bitmapSize uint = (IndexLimit + (1 << bitmapShift) - 1) / (1 << bitmapShift)
type bitmap [bitmapSize]uint32
func (bm *bitmap) String() string {
	if bitmapSize == 1 {
		var fmtStr = fmt.Sprintf("%%0%db", IndexLimit)
		return fmt.Sprintf(fmtStr, bm[0])
	}
	var strs = make([]string, bitmapSize)
	var fmtStr = fmt.Sprintf("%%0%db", 1<<bitmapShift)
	for i := uint(0); i < bitmapSize; i++ {
		strs[i] = fmt.Sprintf(fmtStr, bm[i])
	}
	return strings.Join(strs, " ")
}
func (bm *bitmap) IsSet(idx uint) bool {
	var nth = idx >> bitmapShift
	var bit = idx & ((1 << bitmapShift) - 1)
	return (bm[nth] & (1 << bit)) > 0
}
func (bm *bitmap) Set(idx uint) {
	var nth = idx >> bitmapShift
	var bit = idx & ((1 << bitmapShift) - 1)
	bm[nth] |= 1 << bit
	return
}