Simple, efficient bitmaps in Go with atomic operation support.
go get github.com/KarpelesLab/bitmap// Create a new bitmap with capacity for n bits
bitmap.New(nint) Bitmap// Non-atomic operationsGet(bitint) boolSet(bitint, valuebool)
Toggle(bitint)
// Atomic operations (thread-safe)GetAtomic(bitint) boolSetAtomic(bitint, valuebool)
ToggleAtomic(bitint)package main
import"github.com/KarpelesLab/bitmap"funcmain() {
m:=bitmap.New(128)
m.Set(42, true)
ifm.Get(42) {
// bit 42 is set
}
// Thread-safe operationsm.SetAtomic(100, true)
m.ToggleAtomic(100)
}There are already a few bitmap implementations in Go available out there, however they have some shortfalls and/or are too complex for what a bitmap should do.
- boljen's go-bitmap has separate implementations for Bitmap/Concurrent/Threadsafe, and complexifies a lot what should be very simple.
- ShawnMilo's bitmap has a nice feel but lacks atomic methods and adds string methods using json/gzip/base64 (?)
- Roaring Bitmaps are simply too complex for what I need bitmaps for. You should however definitely use that if you store more than 200k bits or so in total.