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
- Variables
- func BoundSerializedSizeInBytes(cardinality uint64, universeSize uint64) uint64
- type Bitmap
- func AddOffset(x *Bitmap, offset uint32) (answer *Bitmap)
- func AddOffset64(x *Bitmap, offset int64) (answer *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 FromBitSet(bitset *bitset.BitSet) *Bitmap
- func FromDense(bitmap []uint64, doCopy bool) *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 (x1 *Bitmap) AndAny(bitmaps ...*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) Checksum() uint64
- func (rb *Bitmap) Clear()
- func (rb *Bitmap) Clone() *Bitmap
- func (rb *Bitmap) CloneCopyOnWriteContainers()
- func (rb *Bitmap) Contains(x uint32) bool
- func (rb *Bitmap) ContainsInt(x int) bool
- func (rb *Bitmap) DenseSize() uint64
- func (rb *Bitmap) Equals(o interface{}) bool
- func (rb *Bitmap) Flip(rangeStart, rangeEnd uint64)
- func (rb *Bitmap) FlipInt(rangeStart, rangeEnd int)
- func (rb *Bitmap) Freeze() ([]byte, error)
- func (rb *Bitmap) FreezeTo(buf []byte) (int, error)
- func (rb *Bitmap) FromBase64(str string) (int64, error)
- func (rb *Bitmap) FromBuffer(buf []byte) (p int64, err error)
- func (rb *Bitmap) FromDense(bitmap []uint64, doCopy bool)
- func (rb *Bitmap) FromUnsafeBytes(data []byte, cookieHeader ...byte) (p int64, err error)
- func (rb *Bitmap) FrozenView(buf []byte) error
- func (rb *Bitmap) GetCardinality() uint64
- func (rb *Bitmap) GetCopyOnWrite() (val bool)
- func (rb *Bitmap) GetFrozenSizeInBytes() uint64
- 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) IntersectsWithInterval(x, y uint64) bool
- func (rb *Bitmap) IsEmpty() bool
- func (rb *Bitmap) Iterate(cb func(x uint32) bool)
- func (rb *Bitmap) Iterator() IntPeekable
- 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(reader io.Reader, cookieHeader ...byte) (p int64, err error)
- 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) ToBitSet() *bitset.BitSet
- func (rb *Bitmap) ToBytes() ([]byte, error)
- func (rb *Bitmap) ToDense() []uint64
- func (rb *Bitmap) UnmarshalBinary(data []byte) error
- func (rb *Bitmap) WriteDenseTo(bitmap []uint64)
- func (rb *Bitmap) WriteFrozenTo(wr io.Writer) (int, error)
- func (rb *Bitmap) WriteTo(stream io.Writer) (int64, error)
- func (rb *Bitmap) Xor(x2 *Bitmap)
- type IntIterable
- type IntIterator
- type IntPeekable
- type IntReverseIterator
- type ManyIntIterable
- type ManyIntIterator
- type Statistics
Constants ¶
const ( // MaxUint32 is the largest uint32 value. MaxUint32 = math.MaxUint32 // MaxRange is 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 = math.MaxUint16 )
Variables ¶
var ( // ErrFrozenBitmapInvalidCookie is returned when the header does not contain the frozenCookie. ErrFrozenBitmapInvalidCookie = errors.New("header does not contain the frozenCookie") // ErrFrozenBitmapBigEndian is returned when the header is big endian. ErrFrozenBitmapBigEndian = errors.New("loading big endian frozen bitmaps is not supported") // ErrFrozenBitmapIncomplete is returned when the buffer is too small to contain a frozen bitmap. ErrFrozenBitmapIncomplete = errors.New("input buffer too small to contain a frozen bitmap") // ErrFrozenBitmapOverpopulated is returned when the number of containers is too large. ErrFrozenBitmapOverpopulated = errors.New("too many containers") // ErrFrozenBitmapUnexpectedData is returned when the buffer contains unexpected data. ErrFrozenBitmapUnexpectedData = errors.New("spurious data in input") // ErrFrozenBitmapInvalidTypecode is returned when the typecode is invalid. ErrFrozenBitmapInvalidTypecode = errors.New("unrecognized typecode") // ErrFrozenBitmapBufferTooSmall is returned when the buffer is too small. ErrFrozenBitmapBufferTooSmall = errors.New("buffer too small") )
Functions ¶
func BoundSerializedSizeInBytes ¶ added in v0.2.1
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 ¶ added in v0.2.0
type Bitmap struct {
// contains filtered or unexported fields
}
Bitmap represents a compressed bitmap where you can add integers.
func AddOffset ¶ added in v0.4.14
AddOffset adds the value 'offset' to each and every value in a bitmap, generating a new bitmap in the process
func AddOffset64 ¶ added in v0.4.22
AddOffset64 adds the value 'offset' to each and every value in a bitmap, generating a new bitmap in the process If offset + element is outside of the range [0,2^32), that the element will be dropped
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.
Performance hints: if you have very large and tiny bitmaps, it may be beneficial performance-wise to put a tiny bitmap in first position.
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 FromBitSet ¶ added in v1.7.0
FromBitSet creates a new RoaringBitmap from a bitset.BitSet instance
func FromDense ¶ added in v1.7.0
FromDense creates a bitmap from a slice of uint64s representing the bitmap as a dense bitmap. Useful to convert bitmaps from libraries like https://github.com/bits-and-blooms/bitset or https://github.com/kelindar/bitmap into roaring bitmaps fast and with convenience.
This function will not create any run containers, only array and bitmap containers. It's up to the caller to call RunOptimize if they want to further compress the runs of consecutive values.
When doCopy is true, the bitmap is copied into a new slice for each bitmap container. This is useful when the bitmap is going to be modified after this function returns or if it's undesirable to hold references to large bitmaps which the GC would not be able to collect. One copy can still happen even when doCopy is false if the bitmap length is not divisible by bitmapContainerSize.
See also FromBitSet.
func HeapOr ¶ added in v0.1.1
HeapOr computes the union between many bitmaps quickly using a heap. It might be faster than calling Or repeatedly.
func HeapXor ¶ added in v0.1.1
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 NewBitmap ¶ added in v0.2.0
func NewBitmap() *Bitmap
NewBitmap creates a new empty Bitmap (see also New)
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 ¶ added in v0.2.0
AddInt adds the integer x to the bitmap (convenience method: the parameter is casted to uint32 and we call Add)
func (*Bitmap) AddRange ¶ added in v0.2.0
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 ¶ added in v0.2.0
And computes the intersection between two bitmaps and stores the result in the current bitmap
func (*Bitmap) AndAny ¶ added in v0.5.0
AndAny provides a result equivalent to x1.And(FastOr(bitmaps)). It's optimized to minimize allocations. It also might be faster than separate calls.
func (*Bitmap) AndCardinality ¶ added in v0.2.0
AndCardinality returns the cardinality of the intersection between two bitmaps, bitmaps are not modified
func (*Bitmap) AndNot ¶ added in v0.2.0
AndNot computes the difference between two bitmaps and stores the result in the current bitmap
func (*Bitmap) CheckedAdd ¶ added in v0.2.0
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 ¶ added in v0.2.0
CheckedRemove removes the integer x from the bitmap and return true if the integer was effectively removed (and false if the integer was not present)
func (*Bitmap) Checksum ¶ added in v1.0.0
Checksum computes a hash (currently FNV-1a) for a bitmap that is suitable for using bitmaps as elements in hash sets or as keys in hash maps, as well as generally quicker comparisons. The implementation is biased towards efficiency in little endian machines, so expect some extra CPU cycles and memory to be used if your machine is big endian. Likewise, do not use this to verify integrity unless you are certain you will load the bitmap on a machine with the same endianess used to create it. (Thankfully very few people use big endian machines these days.)
func (*Bitmap) Clear ¶ added in v0.2.0
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) CloneCopyOnWriteContainers ¶ added in v0.4.18
func (rb *Bitmap) CloneCopyOnWriteContainers()
CloneCopyOnWriteContainers clones all containers which have needCopyOnWrite set to true. This can be used to make sure it is safe to munmap a []byte that the roaring array may still have a reference to, after calling FromBuffer. More generally this function is useful if you call FromBuffer to construct a bitmap with a backing array buf and then later discard the buf array. Note that you should call CloneCopyOnWriteContainers on all bitmaps that were derived from the 'FromBuffer' bitmap since they map have dependencies on the buf array as well.
func (*Bitmap) Contains ¶ added in v0.2.0
Contains returns true if the integer is contained in the bitmap
func (*Bitmap) ContainsInt ¶ added in v0.2.0
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) DenseSize ¶ added in v1.7.0
DenseSize returns the size of the bitmap when stored as a dense bitmap.
func (*Bitmap) Equals ¶ added in v0.2.0
Equals returns true if the two bitmaps contain the same integers
func (*Bitmap) Flip ¶ added in v0.2.0
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) FlipInt ¶ added in v0.2.0
FlipInt calls Flip after casting the parameters (convenience method)
func (*Bitmap) Freeze ¶ added in v0.9.0
Freeze serializes the bitmap in the CRoaring's frozen format.
func (*Bitmap) FreezeTo ¶ added in v0.9.0
FreezeTo serializes the bitmap in the CRoaring's frozen format.
func (*Bitmap) FromBase64 ¶ added in v0.2.0
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).
Thus FromBuffer is more likely to be appropriate for read-only use cases, when the resulting bitmap can be considered immutable.
If buf becomes unavailable, then a bitmap created with FromBuffer would be effectively broken. Furthermore, any bitmap derived from this bitmap (e.g., via Or, And) might also be broken. Thus, before making buf unavailable, you should call CloneCopyOnWriteContainers on all such bitmaps.
See also the FromUnsafeBytes function which can have better performance in some cases.
func (*Bitmap) FromDense ¶ added in v1.7.0
FromDense unmarshalls from a slice of uint64s representing the bitmap as a dense bitmap. Useful to convert bitmaps from libraries like https://github.com/bits-and-blooms/bitset or https://github.com/kelindar/bitmap into roaring bitmaps fast and with convenience. Callers are responsible for ensuring that the bitmap is empty before calling this function.
This function will not create any run containers, only array and bitmap containers. It is up to the caller to call RunOptimize if they want to further compress the runs of consecutive values.
When doCopy is true, the bitmap is copied into a new slice for each bitmap container. This is useful when the bitmap is going to be modified after this function returns or if it's undesirable to hold references to large bitmaps which the GC would not be able to collect. One copy can still happen even when doCopy is false if the bitmap length is not divisible by bitmapContainerSize.
See FromBitSet.
func (*Bitmap) FromUnsafeBytes ¶ added in v1.4.0
FromUnsafeBytes reads a serialized version of this bitmap from the byte buffer without copy. It is the caller's responsibility to ensure that the input data is not modified and remains valid for the entire lifetime of this bitmap. This method avoids small allocations but holds references to the input data buffer. It is GC-friendly, but it may consume more memory eventually. The containers in the resulting bitmap are immutable containers tied to the provided byte array and they rely on copy-on-write which means that modifying them creates copies. Thus FromUnsafeBytes is more likely to be appropriate for read-only use cases, when the resulting bitmap can be considered immutable.
See also the FromBuffer function. See https://github.com/RoaringBitmap/roaring/pull/395 for more details.
func (*Bitmap) FrozenView ¶ added in v0.9.0
FrozenView creates a static view of a serialized bitmap stored in buf. It uses CRoaring's frozen bitmap format.
The format specification is available here: https://github.com/RoaringBitmap/CRoaring/blob/2c867e9f9c9e2a3a7032791f94c4c7ae3013f6e0/src/roaring.c#L2756-L2783
The provided byte array (buf) is expected to be a constant. The function makes the best effort attempt not to copy data. Only little endian is supported. The function will err if it detects a big endian serialized file. You should take care not to modify buff as it will likely result in unexpected program behavior. If said buffer comes from a memory map, it's advisable to give it read only permissions, either at creation or by calling Mprotect from the golang.org/x/sys/unix package.
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).
If buf becomes unavailable, then a bitmap created with FromBuffer would be effectively broken. Furthermore, any bitmap derived from this bitmap (e.g., via Or, And) might also be broken. Thus, before making buf unavailable, you should call CloneCopyOnWriteContainers on all such bitmaps.
func (*Bitmap) GetCardinality ¶ added in v0.2.0
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) GetFrozenSizeInBytes ¶ added in v0.9.0
GetFrozenSizeInBytes returns the size in bytes of the frozen bitmap.
func (*Bitmap) GetSerializedSizeInBytes ¶ added in v0.2.0
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 ¶ added in v0.2.0
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 ¶ added in v0.2.0
Intersects checks whether two bitmap intersects, bitmaps are not modified
func (*Bitmap) IntersectsWithInterval ¶ added in v1.0.0
IntersectsWithInterval checks whether a bitmap 'rb' and an open interval '[x,y)' intersect.
func (*Bitmap) IsEmpty ¶ added in v0.2.0
IsEmpty returns true if the Bitmap is empty (it is faster than doing (GetCardinality() == 0))
func (*Bitmap) Iterate ¶ added in v0.4.23
Iterate iterates over the bitmap, calling the given callback with each value in the bitmap. If the callback returns false, the iteration is halted. The iteration results are undefined if the bitmap is modified (e.g., with Add or Remove). There is no guarantee as to what order the values will be iterated.
func (*Bitmap) Iterator ¶ added in v0.2.0
func (rb *Bitmap) Iterator() IntPeekable
Iterator creates a new IntPeekable to iterate over the integers contained in the bitmap, in sorted order; the iterator becomes invalid if the bitmap is modified (e.g., with Add or Remove).
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; the iterator becomes invalid if the bitmap is modified (e.g., with Add or Remove).
func (*Bitmap) MarshalBinary ¶ added in v0.2.6
MarshalBinary implements the encoding.BinaryMarshaler interface for the bitmap (same as ToBytes)
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 ¶ added in v0.2.0
Or computes the union between two bitmaps and stores the result in the current bitmap
func (*Bitmap) OrCardinality ¶ added in v0.2.0
OrCardinality returns the cardinality of the union between two bitmaps, bitmaps are not modified
func (*Bitmap) Rank ¶ added in v0.2.0
Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()). If you pass the smallest value, you get the value 1. If you pass a value that is smaller than the smallest value, you get 0. Note that this function differs in convention from the Select function since it return 1 and not 0 on the smallest value.
func (*Bitmap) ReadFrom ¶ added in v0.2.0
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 Since io.Reader is regarded as a stream and cannot be read twice. So add cookieHeader to accept the 4-byte data that has been read in roaring64.ReadFrom. It is not necessary to pass cookieHeader when call roaring.ReadFrom to read the roaring32 data directly.
func (*Bitmap) RemoveRange ¶ added in v0.2.0
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; the iterator becomes invalid if the bitmap is modified (e.g., with Add or Remove).
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) Select ¶ added in v0.2.0
Select returns the xth integer in the bitmap. If you pass 0, you get the smallest element. Note that this function differs in convention from the Rank function which returns 1 on the smallest value.
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 ¶ added in v0.2.0
ToArray creates a new slice containing all of the integers stored in the Bitmap in sorted order
func (*Bitmap) ToBitSet ¶ added in v1.7.0
ToBitSet copies the content of the RoaringBitmap into a bitset.BitSet instance
func (*Bitmap) ToBytes ¶ added in v0.3.3
ToBytes returns an array of bytes corresponding to what is written when calling WriteTo
func (*Bitmap) ToDense ¶ added in v1.7.0
ToDense returns a slice of uint64s representing the bitmap as a dense bitmap. Useful to convert a roaring bitmap to a format that can be used by other libraries like https://github.com/bits-and-blooms/bitset or https://github.com/kelindar/bitmap
func (*Bitmap) UnmarshalBinary ¶ added in v0.2.6
UnmarshalBinary implements the encoding.BinaryUnmarshaler interface for the bitmap
func (*Bitmap) WriteDenseTo ¶ added in v1.7.0
WriteDenseTo writes to a slice of uint64s representing the bitmap as a dense bitmap. Callers are responsible for allocating enough space in the bitmap using DenseSize. Useful to convert a roaring bitmap to a format that can be used by other libraries like https://github.com/bits-and-blooms/bitset or https://github.com/kelindar/bitmap
func (*Bitmap) WriteFrozenTo ¶ added in v1.0.0
WriteFrozenTo serializes the bitmap in the CRoaring's frozen format.
func (*Bitmap) WriteTo ¶ added in v0.2.0
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
type IntIterable ¶
IntIterable allows you to iterate over the values in a Bitmap
type IntIterator ¶ added in v1.1.0
type IntIterator = intIterator
IntIterator is meant to allow you to iterate through the values of a bitmap, see Initialize(a *Bitmap)
type IntPeekable ¶ added in v0.4.19
type IntPeekable interface { IntIterable // PeekNext peeks the next value without advancing the iterator PeekNext() uint32 // AdvanceIfNeeded advances as long as the next value is smaller than minval AdvanceIfNeeded(minval uint32) }
IntPeekable allows you to look at the next value without advancing and advance as long as the next value is smaller than minval
type IntReverseIterator ¶ added in v1.1.0
type IntReverseIterator = intReverseIterator
IntReverseIterator is meant to allow you to iterate through the values of a bitmap, see Initialize(a *Bitmap)
type ManyIntIterable ¶ added in v0.4.3
type ManyIntIterable interface { // NextMany fills buf up with values, returns how many values were returned NextMany(buf []uint32) int // NextMany64 fills up buf with 64 bit values, uses hs as a mask (OR), returns how many values were returned NextMany64(hs uint64, buf []uint64) int }
ManyIntIterable allows you to iterate over the values in a Bitmap
type ManyIntIterator ¶ added in v1.1.0
type ManyIntIterator = manyIntIterator
ManyIntIterator is meant to allow you to iterate through the values of a bitmap, see Initialize(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
- bitmapcontainer.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
- runcontainer.go
- serialization.go
- serialization_littleendian.go
- setutil.go
- setutil_generic.go
- shortiterator.go
- util.go