Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

15 Commits

Repository files navigation

TestGo ReferenceCoverage Status

Bitmap

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.

About

Bitmap manipulation in Go

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages