Package org.roaringbitmap
Class RoaringArray
- java.lang.Object
-
- org.roaringbitmap.RoaringArray
-
- All Implemented Interfaces:
Externalizable
,Serializable
,Cloneable
,AppendableStorage<Container>
public final class RoaringArray extends Object implements Cloneable, Externalizable, AppendableStorage<Container>
Specialized array to store the containers used by a RoaringBitmap. This is not meant to be used by end users.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected static int
NO_OFFSET_THRESHOLD
protected static short
SERIAL_COOKIE
protected static short
SERIAL_COOKIE_NO_RUNCONTAINER
-
Constructor Summary
Constructors Modifier Constructor Description protected
RoaringArray()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected int
advanceUntil(short x, int pos)
Find the smallest integer index larger than pos such that array[index].key>=x.void
append(short key, Container value)
Appends the key and container to the storage, throws if the key is less than the current mark.protected void
append(RoaringArray sa, int startingIndex, int end)
Append the values from another array, no copy is made (use with care)protected void
appendCopiesAfter(RoaringArray sa, short beforeStart)
Append copies of the values AFTER a specified key (may or may not be present) to end.protected void
appendCopiesUntil(RoaringArray sourceArray, short stoppingKey)
Append copies of the values from another array, from the startprotected void
appendCopy(RoaringArray sa, int index)
Append copy of the one value from another arrayprotected void
appendCopy(RoaringArray sa, int startingIndex, int end)
Append copies of the values from another arrayprotected void
clear()
RoaringArray
clone()
protected void
copyRange(int begin, int end, int newBegin)
void
deserialize(DataInput in)
Deserialize.void
deserialize(DataInput in, byte[] buffer)
Deserialize.void
deserialize(ByteBuffer bbf)
Deserialize (retrieve) this bitmap.boolean
equals(Object o)
protected void
extendArray(int k)
int
first()
Gets the first value in the arrayprotected Container
getContainer(short x)
protected Container
getContainerAtIndex(int i)
ContainerPointer
getContainerPointer()
Create a ContainerPointer for this RoaringArrayContainerPointer
getContainerPointer(int startIndex)
Create a ContainerPointer for this RoaringArrayprotected int
getIndex(short x)
protected short
getKeyAtIndex(int i)
int
hashCode()
protected int
headerSize()
protected void
insertNewKeyValueAt(int i, short key, Container value)
int
last()
Gets the last value in the arrayvoid
readExternal(ObjectInput in)
protected void
removeAtIndex(int i)
protected void
removeIndexRange(int begin, int end)
protected void
replaceKeyAndContainerAtIndex(int i, short key, Container c)
protected void
resize(int newLength)
void
serialize(DataOutput out)
Serialize.void
serialize(ByteBuffer buffer)
Serialize.int
serializedSizeInBytes()
Report the number of bytes required for serialization.protected void
setContainerAtIndex(int i, Container c)
protected int
size()
void
trim()
If possible, recover wasted memory.void
writeExternal(ObjectOutput out)
-
-
-
Field Detail
-
SERIAL_COOKIE_NO_RUNCONTAINER
protected static final short SERIAL_COOKIE_NO_RUNCONTAINER
- See Also:
- Constant Field Values
-
SERIAL_COOKIE
protected static final short SERIAL_COOKIE
- See Also:
- Constant Field Values
-
NO_OFFSET_THRESHOLD
protected static final int NO_OFFSET_THRESHOLD
- See Also:
- Constant Field Values
-
-
Method Detail
-
advanceUntil
protected int advanceUntil(short x, int pos)
Find the smallest integer index larger than pos such that array[index].key>=x. If none can be found, return size. Based on code by O. Kaser.- Parameters:
x
- minimal valuepos
- index to exceed- Returns:
- the smallest index greater than pos such that array[index].key is at least as large as min, or size if it is not possible.
-
append
public void append(short key, Container value)
Description copied from interface:AppendableStorage
Appends the key and container to the storage, throws if the key is less than the current mark.- Specified by:
append
in interfaceAppendableStorage<Container>
- Parameters:
key
- the key to appendvalue
- the data to append
-
appendCopiesAfter
protected void appendCopiesAfter(RoaringArray sa, short beforeStart)
Append copies of the values AFTER a specified key (may or may not be present) to end.- Parameters:
sa
- other arraybeforeStart
- given key is the largest key that we won't copy
-
appendCopiesUntil
protected void appendCopiesUntil(RoaringArray sourceArray, short stoppingKey)
Append copies of the values from another array, from the start- Parameters:
sourceArray
- The array to copy fromstoppingKey
- any equal or larger key in other array will terminate copying
-
appendCopy
protected void appendCopy(RoaringArray sa, int index)
Append copy of the one value from another array- Parameters:
sa
- other arrayindex
- index in the other array
-
appendCopy
protected void appendCopy(RoaringArray sa, int startingIndex, int end)
Append copies of the values from another array- Parameters:
sa
- other arraystartingIndex
- starting index in the other arrayend
- endingIndex (exclusive) in the other array
-
append
protected void append(RoaringArray sa, int startingIndex, int end)
Append the values from another array, no copy is made (use with care)- Parameters:
sa
- other arraystartingIndex
- starting index in the other arrayend
- endingIndex (exclusive) in the other array
-
clear
protected void clear()
-
trim
public void trim()
If possible, recover wasted memory.
-
clone
public RoaringArray clone() throws CloneNotSupportedException
- Overrides:
clone
in classObject
- Throws:
CloneNotSupportedException
-
copyRange
protected void copyRange(int begin, int end, int newBegin)
-
deserialize
public void deserialize(DataInput in) throws IOException
Deserialize. If the DataInput is available as a byte[] or a ByteBuffer, you could prefer relying ondeserialize(ByteBuffer)
. If the InputStream is >= 8kB, you could prefer relying ondeserialize(DataInput, byte[])
;- Parameters:
in
- the DataInput stream- Throws:
IOException
- Signals that an I/O exception has occurred.InvalidRoaringFormat
- if a Roaring Bitmap cookie is missing.
-
deserialize
public void deserialize(DataInput in, byte[] buffer) throws IOException
Deserialize.- Parameters:
in
- the DataInput streambuffer
- The buffer gets overwritten with data during deserialization. You can pass a NULL reference as a buffer. A buffer containing at least 8192 bytes might be ideal for performance. It is recommended to reuse the buffer between calls to deserialize (in a single-threaded context) for best performance.- Throws:
IOException
- Signals that an I/O exception has occurred.InvalidRoaringFormat
- if a Roaring Bitmap cookie is missing.
-
deserialize
public void deserialize(ByteBuffer bbf)
Deserialize (retrieve) this bitmap. See format specification at https://github.com/RoaringBitmap/RoaringFormatSpec The current bitmap is overwritten. It is not necessary that limit() on the input ByteBuffer indicates the end of the serialized data. After loading this RoaringBitmap, you can advance to the rest of the data (if there is more) by setting bbf.position(bbf.position() + bitmap.serializedSizeInBytes()); Note that the input ByteBuffer is effectively copied (with the slice operation) so you should expect the provided ByteBuffer position/mark/limit/order to remain unchanged.- Parameters:
bbf
- the byte buffer (can be mapped, direct, array backed etc.
-
extendArray
protected void extendArray(int k)
-
getContainer
protected Container getContainer(short x)
-
getContainerAtIndex
protected Container getContainerAtIndex(int i)
-
getContainerPointer
public ContainerPointer getContainerPointer()
Create a ContainerPointer for this RoaringArray- Returns:
- a ContainerPointer
-
getContainerPointer
public ContainerPointer getContainerPointer(int startIndex)
Create a ContainerPointer for this RoaringArray- Parameters:
startIndex
- starting index in the container list- Returns:
- a ContainerPointer
-
getIndex
protected int getIndex(short x)
-
getKeyAtIndex
protected short getKeyAtIndex(int i)
-
headerSize
protected int headerSize()
-
insertNewKeyValueAt
protected void insertNewKeyValueAt(int i, short key, Container value)
-
readExternal
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
- Specified by:
readExternal
in interfaceExternalizable
- Throws:
IOException
ClassNotFoundException
-
removeAtIndex
protected void removeAtIndex(int i)
-
removeIndexRange
protected void removeIndexRange(int begin, int end)
-
replaceKeyAndContainerAtIndex
protected void replaceKeyAndContainerAtIndex(int i, short key, Container c)
-
resize
protected void resize(int newLength)
-
serialize
public void serialize(DataOutput out) throws IOException
Serialize. The current bitmap is not modified.- Parameters:
out
- the DataOutput stream- Throws:
IOException
- Signals that an I/O exception has occurred.
-
serialize
public void serialize(ByteBuffer buffer)
Serialize. The current bitmap is not modified.- Parameters:
buffer
- the ByteBuffer to write to
-
serializedSizeInBytes
public int serializedSizeInBytes()
Report the number of bytes required for serialization.- Returns:
- the size in bytes
-
setContainerAtIndex
protected void setContainerAtIndex(int i, Container c)
-
size
protected int size()
-
writeExternal
public void writeExternal(ObjectOutput out) throws IOException
- Specified by:
writeExternal
in interfaceExternalizable
- Throws:
IOException
-
first
public int first()
Gets the first value in the array- Returns:
- the first value in the array
- Throws:
NoSuchElementException
- if empty
-
last
public int last()
Gets the last value in the array- Returns:
- the last value in the array
- Throws:
NoSuchElementException
- if empty
-
-