Documentation ¶
Overview ¶
Package roaring is an implementation of Roaring Bitmaps in Go. They provide fast compressed bitmap data structures (also called bitset). They are ideally suited to represent sets of integers over relatively small ranges. See http://roaringbitmap.org for details.
Index ¶
- Constants
- func BoundSerializedSizeInBytes(cardinality uint64, universeSize uint64) uint64
- type Bitmap
- func And(x1, x2 *Bitmap) *Bitmap
- func AndNot(x1, x2 *Bitmap) *Bitmap
- func BitmapOf(dat ...uint32) *Bitmap
- func FastAnd(bitmaps ...*Bitmap) *Bitmap
- func FastOr(bitmaps ...*Bitmap) *Bitmap
- func Flip(bm *Bitmap, rangeStart, rangeEnd uint64) *Bitmap
- func FlipInt(bm *Bitmap, rangeStart, rangeEnd int) *Bitmap
- func HeapOr(bitmaps ...*Bitmap) *Bitmap
- func HeapXor(bitmaps ...*Bitmap) *Bitmap
- func New() *Bitmap
- func NewBitmap() *Bitmap
- func Or(x1, x2 *Bitmap) *Bitmap
- func ParAnd(parallelism int, bitmaps ...*Bitmap) *Bitmap
- func ParHeapOr(parallelism int, bitmaps ...*Bitmap) *Bitmap
- func ParOr(parallelism int, bitmaps ...*Bitmap) *Bitmap
- func Xor(x1, x2 *Bitmap) *Bitmap
- func (rb *Bitmap) Add(x uint32)
- func (rb *Bitmap) AddInt(x int)
- func (rb *Bitmap) AddMany(dat []uint32)
- func (rb *Bitmap) AddRange(rangeStart, rangeEnd uint64)
- func (rb *Bitmap) And(x2 *Bitmap)
- func (rb *Bitmap) AndCardinality(x2 *Bitmap) uint64
- func (rb *Bitmap) AndNot(x2 *Bitmap)
- func (rb *Bitmap) CheckedAdd(x uint32) bool
- func (rb *Bitmap) CheckedRemove(x uint32) bool
- func (rb *Bitmap) Clear()
- func (rb *Bitmap) Clone() *Bitmap
- func (rb *Bitmap) Contains(x uint32) bool
- func (rb *Bitmap) ContainsInt(x int) bool
- func (rb *Bitmap) Equals(o interface{}) bool
- func (rb *Bitmap) Flip(rangeStart, rangeEnd uint64)
- func (rb *Bitmap) FlipInt(rangeStart, rangeEnd int)
- func (rb *Bitmap) FromBase64(str string) (int64, error)
- func (rb *Bitmap) FromBuffer(buf []byte) (int64, error)
- func (rb *Bitmap) GetCardinality() uint64
- func (rb *Bitmap) GetCopyOnWrite() (val bool)
- func (rb *Bitmap) GetSerializedSizeInBytes() uint64
- func (rb *Bitmap) GetSizeInBytes() uint64
- func (rb *Bitmap) HasRunCompression() bool
- func (rb *Bitmap) Intersects(x2 *Bitmap) bool
- func (rb *Bitmap) IsEmpty() bool
- func (rb *Bitmap) Iterator() IntIterable
- func (rb *Bitmap) ManyIterator() ManyIntIterable
- func (rb *Bitmap) MarshalBinary() ([]byte, error)
- func (rb *Bitmap) Maximum() uint32
- func (rb *Bitmap) Minimum() uint32
- func (rb *Bitmap) Or(x2 *Bitmap)
- func (rb *Bitmap) OrCardinality(x2 *Bitmap) uint64
- func (rb *Bitmap) Rank(x uint32) uint64
- func (rb *Bitmap) ReadFrom(stream io.Reader) (int64, error)
- func (rb *Bitmap) ReadFromMsgpack(stream io.Reader) (int64, error)deprecated
- func (rb *Bitmap) Remove(x uint32)
- func (rb *Bitmap) RemoveRange(rangeStart, rangeEnd uint64)
- func (rb *Bitmap) ReverseIterator() IntIterable
- func (rb *Bitmap) RunOptimize()
- func (rb *Bitmap) Select(x uint32) (uint32, error)
- func (rb *Bitmap) SetCopyOnWrite(val bool)
- func (rb *Bitmap) Stats() Statistics
- func (rb *Bitmap) String() string
- func (rb *Bitmap) ToArray() []uint32
- func (rb *Bitmap) ToBase64() (string, error)
- func (rb *Bitmap) ToBytes() ([]byte, error)
- func (rb *Bitmap) UnmarshalBinary(data []byte) error
- func (rb *Bitmap) WriteTo(stream io.Writer) (int64, error)
- func (rb *Bitmap) WriteToMsgpack(stream io.Writer) (int64, error)deprecated
- func (rb *Bitmap) Xor(x2 *Bitmap)
- type IntIterable
- type ManyIntIterable
- type Statistics
Constants ¶
const ( // MaxUint32 is the largest uint32 value. MaxUint32 = 4294967295 // One more than the maximum allowed bitmap bit index. For use as an upper // bound for ranges. MaxRange uint64 = MaxUint32 + 1 // MaxUint16 is the largest 16 bit unsigned int. // This is the largest value an interval16 can store. MaxUint16 = 65535 )
Variables ¶
This section is empty.
Functions ¶
func BoundSerializedSizeInBytes ¶
BoundSerializedSizeInBytes returns an upper bound on the serialized size in bytes assuming that one wants to store "cardinality" integers in [0, universe_size)
Types ¶
type Bitmap ¶
type Bitmap struct {
// contains filtered or unexported fields
}
Bitmap represents a compressed bitmap where you can add integers.
func FastAnd ¶
FastAnd computes the intersection between many bitmaps quickly Compared to the And function, it can take many bitmaps as input, thus saving the trouble of manually calling "And" many times.
func FastOr ¶
FastOr computes the union between many bitmaps quickly, as opposed to having to call Or repeatedly. It might also be faster than calling Or repeatedly.
func Flip ¶
Flip negates the bits in the given range (i.e., [rangeStart,rangeEnd)), any integer present in this range and in the bitmap is removed, and any integer present in the range and not in the bitmap is added, a new bitmap is returned leaving the current bitmap unchanged. The function uses 64-bit parameters even though a Bitmap stores 32-bit values because it is allowed and meaningful to use [0,uint64(0x100000000)) as a range while uint64(0x100000000) cannot be represented as a 32-bit value.
func HeapOr ¶
HeapOr computes the union between many bitmaps quickly using a heap. It might be faster than calling Or repeatedly.
func HeapXor ¶
HeapXor computes the symmetric difference between many bitmaps quickly (as opposed to calling Xor repeated). Internally, this function uses a heap. It might be faster than calling Xor repeatedly.
func ParAnd ¶ added in v0.3.13
ParAnd computes the intersection (AND) of all provided bitmaps in parallel, where the parameter "parallelism" determines how many workers are to be used (if it is set to 0, a default number of workers is chosen)
func ParHeapOr ¶ added in v0.4.5
ParHeapOr computes the union (OR) of all provided bitmaps in parallel, where the parameter "parallelism" determines how many workers are to be used (if it is set to 0, a default number of workers is chosen) ParHeapOr uses a heap to compute the union. For rare cases it might be faster than ParOr
func ParOr ¶ added in v0.3.13
ParOr computes the union (OR) of all provided bitmaps in parallel, where the parameter "parallelism" determines how many workers are to be used (if it is set to 0, a default number of workers is chosen)
func (*Bitmap) AddInt ¶
AddInt adds the integer x to the bitmap (convenience method: the parameter is casted to uint32 and we call Add)
func (*Bitmap) AddRange ¶
AddRange adds the integers in [rangeStart, rangeEnd) to the bitmap. The function uses 64-bit parameters even though a Bitmap stores 32-bit values because it is allowed and meaningful to use [0,uint64(0x100000000)) as a range while uint64(0x100000000) cannot be represented as a 32-bit value.
func (*Bitmap) And ¶
And computes the intersection between two bitmaps and stores the result in the current bitmap
func (*Bitmap) AndCardinality ¶
AndCardinality returns the cardinality of the intersection between two bitmaps, bitmaps are not modified
func (*Bitmap) AndNot ¶
AndNot computes the difference between two bitmaps and stores the result in the current bitmap
func (*Bitmap) CheckedAdd ¶
CheckedAdd adds the integer x to the bitmap and return true if it was added (false if the integer was already present)
func (*Bitmap) CheckedRemove ¶
CheckedRemove removes the integer x from the bitmap and return true if the integer was effectively remove (and false if the integer was not present)
func (*Bitmap) Clear ¶
func (rb *Bitmap) Clear()
Clear resets the Bitmap to be logically empty, but may retain some memory allocations that may speed up future operations
func (*Bitmap) ContainsInt ¶
ContainsInt returns true if the integer is contained in the bitmap (this is a convenience method, the parameter is casted to uint32 and Contains is called)
func (*Bitmap) Flip ¶
Flip negates the bits in the given range (i.e., [rangeStart,rangeEnd)), any integer present in this range and in the bitmap is removed, and any integer present in the range and not in the bitmap is added. The function uses 64-bit parameters even though a Bitmap stores 32-bit values because it is allowed and meaningful to use [0,uint64(0x100000000)) as a range while uint64(0x100000000) cannot be represented as a 32-bit value.
func (*Bitmap) FromBase64 ¶
FromBase64 deserializes a bitmap from Base64
func (*Bitmap) FromBuffer ¶ added in v0.3.15
FromBuffer creates a bitmap from its serialized version stored in buffer
The format specification is available here: https://github.com/RoaringBitmap/RoaringFormatSpec
The provided byte array (buf) is expected to be a constant. The function makes the best effort attempt not to copy data. You should take care not to modify buff as it will likely result in unexpected program behavior.
Resulting bitmaps are effectively immutable in the following sense: a copy-on-write marker is used so that when you modify the resulting bitmap, copies of selected data (containers) are made. You should *not* change the copy-on-write status of the resulting bitmaps (SetCopyOnWrite).
func (*Bitmap) GetCardinality ¶
GetCardinality returns the number of integers contained in the bitmap
func (*Bitmap) GetCopyOnWrite ¶ added in v0.2.4
GetCopyOnWrite gets this bitmap's copy-on-write property
func (*Bitmap) GetSerializedSizeInBytes ¶
GetSerializedSizeInBytes computes the serialized size in bytes of the Bitmap. It should correspond to the number of bytes written when invoking WriteTo. You can expect that this function is much cheaper computationally than WriteTo.
func (*Bitmap) GetSizeInBytes ¶
GetSizeInBytes estimates the memory usage of the Bitmap. Note that this might differ slightly from the amount of bytes required for persistent storage
func (*Bitmap) HasRunCompression ¶ added in v0.3.1
HasRunCompression returns true if the bitmap benefits from run compression
func (*Bitmap) Intersects ¶
Intersects checks whether two bitmap intersects, bitmaps are not modified
func (*Bitmap) IsEmpty ¶
IsEmpty returns true if the Bitmap is empty (it is faster than doing (GetCardinality() == 0))
func (*Bitmap) Iterator ¶
func (rb *Bitmap) Iterator() IntIterable
Iterator creates a new IntIterable to iterate over the integers contained in the bitmap, in sorted order
func (*Bitmap) ManyIterator ¶ added in v0.4.3
func (rb *Bitmap) ManyIterator() ManyIntIterable
ManyIterator creates a new ManyIntIterable to iterate over the integers contained in the bitmap, in sorted order
func (*Bitmap) MarshalBinary ¶ added in v0.2.6
MarshalBinary implements the encoding.BinaryMarshaler interface for the bitmap
func (*Bitmap) Maximum ¶ added in v0.3.6
Maximum get the largest value stored in this roaring bitmap, assumes that it is not empty
func (*Bitmap) Minimum ¶ added in v0.3.6
Minimum get the smallest value stored in this roaring bitmap, assumes that it is not empty
func (*Bitmap) Or ¶
Or computes the union between two bitmaps and stores the result in the current bitmap
func (*Bitmap) OrCardinality ¶
OrCardinality returns the cardinality of the union between two bitmaps, bitmaps are not modified
func (*Bitmap) Rank ¶
Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality())
func (*Bitmap) ReadFrom ¶
ReadFrom reads a serialized version of this bitmap from stream. The format is compatible with other RoaringBitmap implementations (Java, C) and is documented here: https://github.com/RoaringBitmap/RoaringFormatSpec
func (*Bitmap) ReadFromMsgpack
deprecated
added in
v0.3.0
func (*Bitmap) RemoveRange ¶
RemoveRange removes the integers in [rangeStart, rangeEnd) from the bitmap. The function uses 64-bit parameters even though a Bitmap stores 32-bit values because it is allowed and meaningful to use [0,uint64(0x100000000)) as a range while uint64(0x100000000) cannot be represented as a 32-bit value.
func (*Bitmap) ReverseIterator ¶ added in v0.4.9
func (rb *Bitmap) ReverseIterator() IntIterable
ReverseIterator creates a new IntIterable to iterate over the integers contained in the bitmap, in sorted order
func (*Bitmap) RunOptimize ¶ added in v0.3.0
func (rb *Bitmap) RunOptimize()
RunOptimize attempts to further compress the runs of consecutive values found in the bitmap
func (*Bitmap) SetCopyOnWrite ¶ added in v0.2.4
SetCopyOnWrite sets this bitmap to use copy-on-write so that copies are fast and memory conscious if the parameter is true, otherwise we leave the default where hard copies are made (copy-on-write requires extra care in a threaded context). Calling SetCopyOnWrite(true) on a bitmap created with FromBuffer is unsafe.
func (*Bitmap) Stats ¶ added in v0.3.0
func (rb *Bitmap) Stats() Statistics
Stats returns details on container type usage in a Statistics struct.
func (*Bitmap) ToArray ¶
ToArray creates a new slice containing all of the integers stored in the Bitmap in sorted order
func (*Bitmap) ToBytes ¶ added in v0.3.3
ToBytes returns an array of bytes corresponding to what is written when calling WriteTo
func (*Bitmap) UnmarshalBinary ¶ added in v0.2.6
UnmarshalBinary implements the encoding.BinaryUnmarshaler interface for the bitmap
func (*Bitmap) WriteTo ¶
WriteTo writes a serialized version of this bitmap to stream. The format is compatible with other RoaringBitmap implementations (Java, C) and is documented here: https://github.com/RoaringBitmap/RoaringFormatSpec
func (*Bitmap) WriteToMsgpack
deprecated
added in
v0.3.0
Deprecated: WriteToMsgpack writes a msgpack2/snappy-streaming compressed serialized version of this bitmap to stream. The format is not compatible with the WriteTo() format, and is experimental: it may produce smaller on disk footprint and/or be faster to read, depending on your content. Currently only the Go roaring implementation supports this format.
type IntIterable ¶
IntIterable allows you to iterate over the values in a Bitmap
type ManyIntIterable ¶ added in v0.4.3
type ManyIntIterable interface { // pass in a buffer to fill up with values, returns how many values were returned NextMany([]uint32) int }
ManyIntIterable allows you to iterate over the values in a Bitmap
type Statistics ¶ added in v0.3.0
type Statistics struct { Cardinality uint64 Containers uint64 ArrayContainers uint64 ArrayContainerBytes uint64 ArrayContainerValues uint64 BitmapContainers uint64 BitmapContainerBytes uint64 BitmapContainerValues uint64 RunContainers uint64 RunContainerBytes uint64 RunContainerValues uint64 }
Statistics provides details on the container types in use.
Source Files ¶
- arraycontainer.go
- arraycontainer_gen.go
- bitmapcontainer.go
- bitmapcontainer_gen.go
- clz.go
- ctz.go
- fastaggregation.go
- manyiterator.go
- parallel.go
- popcnt.go
- popcnt_generic.go
- popcnt_slices.go
- priorityqueue.go
- roaring.go
- roaringarray.go
- roaringarray_gen.go
- runcontainer.go
- runcontainer_gen.go
- serialization.go
- serialization_littleendian.go
- setutil.go
- shortiterator.go
- util.go