You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Simple, efficient bitmaps in Go with atomic operation support.
Installation
go get github.com/KarpelesLab/bitmap
API
// 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)
Example
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)
}
Why?
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.