All Projects → willf → Bitset

willf / Bitset

Licence: bsd-3-clause
Go package implementing bitsets

Programming Languages

go
31211 projects - #10 most used programming language

Labels

Projects that are alternatives of or similar to Bitset

Croaring Rs
Rust wrapper for CRoaring
Stars: ✭ 89 (-86.29%)
Mutual labels:  bitset
ecs
Build your own Game-Engine based on the Entity Component System concept in Golang.
Stars: ✭ 68 (-89.52%)
Mutual labels:  bitset
bitset2
std::bitset with constexpr implementations plus additional features.
Stars: ✭ 76 (-88.29%)
Mutual labels:  bitset
Fastbitset.js
Speed-optimized BitSet implementation for modern browsers and JavaScript engines
Stars: ✭ 118 (-81.82%)
Mutual labels:  bitset
Bitter
A Swift Bits Manipulation/Bitwise Operations Toolkit
Stars: ✭ 197 (-69.65%)
Mutual labels:  bitset
enumset
A library for compact bit sets containing enums.
Stars: ✭ 60 (-90.76%)
Mutual labels:  bitset
Cbitset
A simple bitset library in C
Stars: ✭ 73 (-88.75%)
Mutual labels:  bitset
Bitvec
A crate for managing memory bit by bit
Stars: ✭ 411 (-36.67%)
Mutual labels:  bitset
Bit-lib4j
Useful library to handle bytes or bits in Java. Read and write data in a byte array with a custom size for Java types. Read/Write Integer, Long, signed data, String, Hexa String and Date bit to bit
Stars: ✭ 53 (-91.83%)
Mutual labels:  bitset
prjxray-db
Project X-Ray Database: XC7 Series
Stars: ✭ 52 (-91.99%)
Mutual labels:  bitset
Pyroaringbitmap
An efficient and light-weight ordered set of 32 bits integers.
Stars: ✭ 128 (-80.28%)
Mutual labels:  bitset
Roaringbitmap
A better compressed bitset in Java
Stars: ✭ 2,460 (+279.04%)
Mutual labels:  bitset
BitLens
🔎 Have your bits and eat them too! A C++17 bit lens container for vector types.
Stars: ✭ 20 (-96.92%)
Mutual labels:  bitset
Bit
Bitset data structure
Stars: ✭ 100 (-84.59%)
Mutual labels:  bitset
Mlib
Library of generic and type safe containers in pure C language (C99 or C11) for a wide collection of container (comparable to the C++ STL).
Stars: ✭ 321 (-50.54%)
Mutual labels:  bitset
Hibitset
Hierarchical bit set container
Stars: ✭ 81 (-87.52%)
Mutual labels:  bitset
SwiftBitset
A fast Bitset class in Swift
Stars: ✭ 33 (-94.92%)
Mutual labels:  bitset
Javaewah
A compressed alternative to the Java BitSet class
Stars: ✭ 474 (-26.96%)
Mutual labels:  bitset
Ewahboolarray
A compressed bitmap class in C++.
Stars: ✭ 381 (-41.29%)
Mutual labels:  bitset
bitmap-elixir
Bitmap implementation in Elixir using binaries and integers. Fast space efficient data structure for lookups
Stars: ✭ 30 (-95.38%)
Mutual labels:  bitset

bitset

Go language library to map between non-negative integers and boolean values

Test Master Coverage Status Go Report Card PkgGoDev

Description

Package bitset implements bitsets, a mapping between non-negative integers and boolean values. It should be more efficient than map[uint] bool.

It provides methods for setting, clearing, flipping, and testing individual integers.

But it also provides set intersection, union, difference, complement, and symmetric operations, as well as tests to check whether any, all, or no bits are set, and querying a bitset's current length and number of positive bits.

BitSets are expanded to the size of the largest set bit; the memory allocation is approximately Max bits, where Max is the largest set bit. BitSets are never shrunk. On creation, a hint can be given for the number of bits that will be used.

Many of the methods, including Set, Clear, and Flip, return a BitSet pointer, which allows for chaining.

Example use:

package main

import (
	"fmt"
	"math/rand"

	"github.com/willf/bitset"
)

func main() {
	fmt.Printf("Hello from BitSet!\n")
	var b bitset.BitSet
	// play some Go Fish
	for i := 0; i < 100; i++ {
		card1 := uint(rand.Intn(52))
		card2 := uint(rand.Intn(52))
		b.Set(card1)
		if b.Test(card2) {
			fmt.Println("Go Fish!")
		}
		b.Clear(card1)
	}

	// Chaining
	b.Set(10).Set(11)

	for i, e := b.NextSet(0); e; i, e = b.NextSet(i + 1) {
		fmt.Println("The following bit is set:", i)
	}
	if b.Intersection(bitset.New(100).Set(10)).Count() == 1 {
		fmt.Println("Intersection works.")
	} else {
		fmt.Println("Intersection doesn't work???")
	}
}

As an alternative to BitSets, one should check out the 'big' package, which provides a (less set-theoretical) view of bitsets.

Package documentation is at: https://pkg.go.dev/github.com/willf/bitset?tab=doc

Memory Usage

The memory usage of a bitset using N bits is at least N/8 bytes. The number of bits in a bitset is at least as large as one plus the greatest bit index you have accessed. Thus it is possible to run out of memory while using a bitset. If you have lots of bits, you might prefer compressed bitsets, like the Roaring bitmaps and its Go implementation.

Implementation Note

Go 1.9 introduced a native math/bits library. We provide backward compatibility to Go 1.7, which might be removed.

It is possible that a later version will match the math/bits return signature for counts (which is int, rather than our library's unit64). If so, the version will be bumped.

Installation

go get github.com/willf/bitset

Contributing

If you wish to contribute to this project, please branch and issue a pull request against master ("GitHub Flow")

Running all tests

Before committing the code, please check if it passes tests, has adequate coverage, etc.

go test
go test -cover
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].