Skip to content

plhwin/bitmap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 

Repository files navigation

Golang bitmap

this bitmap(bitset) function is achieved by the official package: "math/big" (big.Int), it's high efficiency and easy to use.

Install

go get github.com/plhwin/bitmap

Example

package main

import (
	"fmt"
	"github.com/plhwin/bitmap"
)

func main() {
	x := bitmap.New().Set(0).Set(1).Set(3).Set(5).Set(7).Set(9)
	y := bitmap.New().Set(2).Set(4).Set(5).Set(6).Set(8)
	z := bitmap.New() // z is a new empty bitmap

	// remove offset 5 from x, now x's offset is [0 1 3 7 9], bitmap is 1010001011
	x.Clear(5)

	// set new offset to y agin, now y's offset is [2 4 5 6 8 9], bitmap is 1101110100
	y.Set(9)

	//find out the same bitset from x and y
	and := x.And(y)
	// remove the same bitset from x and y
	or := x.Or(y)
	// find out the different bitset from (x and y)+(y and x)
	xor := x.Xor(y)
	// find out the different bitset from (x and y)
	andnot := x.AndNot(y)

	fmt.Println("x:", x, x.GetAllSetBits(true)) // if false, it will be return a random slice
	fmt.Println("y:", y, y.GetAllSetBits(true))
	fmt.Println("z:", z, z.GetAllSetBits(true), z.BitLen(), z.IsEmpty()) // this bitmap's len is 0, and z.IsEmpty() is true
	fmt.Println("and:", and, and.GetAllSetBits(true))
	fmt.Println("or:", or, or.GetAllSetBits(true))
	fmt.Println("xor:", xor, xor.GetAllSetBits(true))
	fmt.Println("andnot:", andnot, andnot.GetAllSetBits(true))
	
	// here if you want to check a offset in x, you can do it like this:
	fmt.Println("if offset 0 in x?", x.Test(0)) //true
	fmt.Println("if offset 5 in x?", x.Test(5)) //false, Because we run the code 'x.Clear(5)' above.
}

code output:

x: 1010001011 [0 1 3 7 9]
y: 1101110100 [2 4 5 6 8 9]
z: 0 [] 0 true
and: 1000000000 [9]
or: 1111111111 [0 1 2 3 4 5 6 7 8 9]
xor: 111111111 [0 1 2 3 4 5 6 7 8]
andnot: 10001011 [0 1 3 7]
if offset 0 in x? true
if offset 5 in x? false

##Tips

let's see the output:

x: 1010001011 [0 1 3 7 9]

please from right to left to see the bitmap 1010001011, you can find out the corresponding relation between the offset slice [0 1 3 7 9] and bitmap 1010001011, I told you to avoid your strange.

##Others based on official package "math/big" (big.Int), the length of the bitmap that can be stored depends on the size of your memory. more about "math/big".

when the bitmap's length exceeds 10 billion, the performance begin to degradation, combined with the actual production environment, I think that 10 billion has been long enough, in most cases it is sufficient to use.

if you have any problems, please submit issues here, thanks.

About

Go/Golang's bitmap(bitset) function,this function is achieved by the official package: "math/big" (big.Int),it's high efficiency and easy to use

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages