@InterfaceAudience.Private @InterfaceStability.Evolving public abstract class AbstractPositionedByteRange extends AbstractByteRange implements PositionedByteRange
SimpleByteRange
implementation with position
support. position
is considered transient, not fundamental to the
definition of the range, and does not participate in
AbstractByteRange.compareTo(ByteRange)
, AbstractByteRange.hashCode()
, or
Object.equals(Object)
. Position
is retained by copy operations.Modifier and Type | Field and Description |
---|---|
protected int |
limit |
protected int |
position
The current index into the range.
|
bytes, hash, length, offset, UNSET_HASH_VALUE
Constructor and Description |
---|
AbstractPositionedByteRange() |
Modifier and Type | Method and Description |
---|---|
abstract PositionedByteRange |
deepCopy()
Create a new
ByteRange with new backing byte[] containing a copy
of the content from this range's window. |
byte |
get()
Retrieve the next byte from this range.
|
PositionedByteRange |
get(byte[] dst)
Fill
dst with bytes from the range, starting from position . |
PositionedByteRange |
get(byte[] dst,
int offset,
int length)
Fill
dst with bytes from the range, starting from the current
position . |
PositionedByteRange |
get(int index,
byte[] dst)
Fill
dst with bytes from the range, starting from index . |
PositionedByteRange |
get(int index,
byte[] dst,
int offset,
int length)
Fill
dst with bytes from the range, starting from index . |
int |
getInt()
Retrieve the next int value from this range.
|
int |
getLimit()
Return the current limit
|
long |
getLong()
Retrieve the next long value from this range.
|
int |
getPosition()
The current
position marker. |
int |
getRemaining()
The number of bytes remaining between position and the end of the range.
|
short |
getShort()
Retrieve the next short value from this range.
|
long |
getVLong()
Retrieve the next long value, which is stored as VLong, from this range
|
byte |
peek()
Retrieve the next byte from this range without incrementing position.
|
abstract PositionedByteRange |
put(byte val)
Store
val at the next position in this range. |
abstract PositionedByteRange |
put(byte[] val)
Store the content of
val in this range, starting at the next position. |
abstract PositionedByteRange |
put(byte[] val,
int offset,
int length)
Store
length bytes from val into this range. |
abstract PositionedByteRange |
put(int index,
byte val)
Store
val at index . |
abstract PositionedByteRange |
put(int index,
byte[] val)
Store
val at index . |
abstract PositionedByteRange |
put(int index,
byte[] val,
int offset,
int length)
Store
length bytes from val into this range, starting at
index . |
abstract PositionedByteRange |
putInt(int val)
Store int
val at the next position in this range. |
abstract PositionedByteRange |
putInt(int index,
int val)
Store the int value at
index |
abstract PositionedByteRange |
putLong(int index,
long val)
Store the long value at
index |
abstract PositionedByteRange |
putLong(long val)
Store long
val at the next position in this range. |
abstract PositionedByteRange |
putShort(int index,
short val)
Store the short value at
index |
abstract PositionedByteRange |
putShort(short val)
Store short
val at the next position in this range. |
abstract int |
putVLong(int index,
long val)
Store the long value at
index as a VLong |
abstract int |
putVLong(long val)
Store the long
val at the next position as a VLong |
PositionedByteRange |
set(byte[] bytes)
Reuse this
ByteRange over a new byte[]. |
PositionedByteRange |
set(byte[] bytes,
int offset,
int length)
Reuse this
ByteRange over a new byte[]. |
PositionedByteRange |
set(int capacity)
Reuse this
ByteRange over a new byte[]. |
PositionedByteRange |
setLength(int length)
Update the length of this range.
|
PositionedByteRange |
setLimit(int limit)
Limits the byte range upto a specified value.
|
PositionedByteRange |
setOffset(int offset)
Update the beginning of this range.
|
PositionedByteRange |
setPosition(int position)
Update the
position index. |
abstract PositionedByteRange |
shallowCopy()
Create a new
ByteRange that points at this range's byte[]. |
abstract PositionedByteRange |
shallowCopySubRange(int innerOffset,
int copyLength)
Create a new
ByteRange that points at this range's byte[]. |
abstract PositionedByteRange |
unset()
Nullifies this ByteRange.
|
clearHashCache, compareTo, deepCopySubRangeTo, deepCopyTo, deepCopyToNewArray, get, getBytes, getInt, getLength, getLong, getOffset, getShort, getVLong, getVLongSize, hashCode, isEmpty, isEmpty, isHashCached, toString
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait
deepCopySubRangeTo, deepCopyTo, deepCopyToNewArray, get, getBytes, getInt, getLength, getLong, getOffset, getShort, getVLong, isEmpty
compareTo
protected int position
ByteBuffer
position, it
points to the next value that will be read/written in the array. It
provides the appearance of being 0-indexed, even though its value is
calculated according to offset.
Position is considered transient and does not participate in
Object.equals(Object)
or AbstractByteRange.hashCode()
comparisons.
protected int limit
public abstract PositionedByteRange unset()
ByteRange
unset
in interface ByteRange
unset
in interface PositionedByteRange
unset
in class AbstractByteRange
public PositionedByteRange set(int capacity)
ByteRange
ByteRange
over a new byte[]. offset
is set to
0 and length
is set to capacity
.set
in interface ByteRange
set
in interface PositionedByteRange
set
in class AbstractByteRange
capacity
- the size of a new byte[].public PositionedByteRange set(byte[] bytes)
ByteRange
ByteRange
over a new byte[]. offset
is set to
0 and length
is set to bytes.length
. A null bytes
IS supported, in which case this method will behave equivalently to
ByteRange.unset()
.set
in interface ByteRange
set
in interface PositionedByteRange
set
in class AbstractByteRange
bytes
- the array to wrap.public PositionedByteRange set(byte[] bytes, int offset, int length)
ByteRange
ByteRange
over a new byte[]. A null bytes
IS
supported, in which case this method will behave equivalently to
ByteRange.unset()
, regardless of the values of offset
and
length
.set
in interface ByteRange
set
in interface PositionedByteRange
set
in class AbstractByteRange
bytes
- The array to wrap.offset
- The offset into bytes
considered the beginning of
this range.length
- The length of this range.public PositionedByteRange setOffset(int offset)
offset + length
may not be
greater than bytes.length
. Resets position
to 0.setOffset
in interface ByteRange
setOffset
in interface PositionedByteRange
setOffset
in class AbstractByteRange
offset
- the new start of this range.public PositionedByteRange setLength(int length)
offset + length
should not be
greater than bytes.length
. If position
is greater than the
new length
, sets position
to length
.setLength
in interface ByteRange
setLength
in interface PositionedByteRange
setLength
in class AbstractByteRange
length
- The new length of this range.public int getPosition()
PositionedByteRange
position
marker. This valuae is 0-indexed, relative to
the beginning of the range.getPosition
in interface PositionedByteRange
public PositionedByteRange setPosition(int position)
PositionedByteRange
position
index. May not be greater than length
.setPosition
in interface PositionedByteRange
position
- the new position in this range.public int getRemaining()
PositionedByteRange
getRemaining
in interface PositionedByteRange
public byte peek()
PositionedByteRange
peek
in interface PositionedByteRange
public byte get()
PositionedByteRange
get
in interface PositionedByteRange
public PositionedByteRange get(byte[] dst)
PositionedByteRange
dst
with bytes from the range, starting from position
.
This range's position
is incremented by the length of dst
,
the number of bytes copied.get
in interface PositionedByteRange
dst
- the destination of the copy.public PositionedByteRange get(byte[] dst, int offset, int length)
PositionedByteRange
dst
with bytes from the range, starting from the current
position
. length
bytes are copied into dst
,
starting at offset
. This range's position
is incremented
by the number of bytes copied.get
in interface PositionedByteRange
dst
- the destination of the copy.offset
- the offset into dst
to start the copy.length
- the number of bytes to copy into dst
.public abstract PositionedByteRange put(byte val)
PositionedByteRange
val
at the next position in this range.put
in interface PositionedByteRange
val
- the new value.public abstract PositionedByteRange put(byte[] val)
PositionedByteRange
val
in this range, starting at the next position.put
in interface PositionedByteRange
val
- the new value.public abstract PositionedByteRange put(byte[] val, int offset, int length)
PositionedByteRange
length
bytes from val
into this range. Bytes from
val
are copied starting at offset
into the range, starting at
the current position.put
in interface PositionedByteRange
val
- the new value.offset
- the offset in val
from which to start copying.length
- the number of bytes to copy from val
.public abstract PositionedByteRange putInt(int index, int val)
ByteRange
index
putInt
in interface ByteRange
putInt
in interface PositionedByteRange
putInt
in class AbstractByteRange
index
- the index in the range where val
is storedval
- the value to storepublic abstract PositionedByteRange putLong(int index, long val)
ByteRange
index
putLong
in interface ByteRange
putLong
in interface PositionedByteRange
putLong
in class AbstractByteRange
index
- the index in the range where val
is storedval
- the value to storepublic abstract PositionedByteRange putShort(int index, short val)
ByteRange
index
putShort
in interface ByteRange
putShort
in interface PositionedByteRange
putShort
in class AbstractByteRange
index
- the index in the range where val
is storedval
- the value to storepublic abstract PositionedByteRange putInt(int val)
PositionedByteRange
val
at the next position in this range.putInt
in interface PositionedByteRange
val
- the new value.public abstract PositionedByteRange putLong(long val)
PositionedByteRange
val
at the next position in this range.putLong
in interface PositionedByteRange
val
- the new value.public abstract PositionedByteRange putShort(short val)
PositionedByteRange
val
at the next position in this range.putShort
in interface PositionedByteRange
val
- the new value.public abstract int putVLong(int index, long val)
ByteRange
index
as a VLongputVLong
in interface ByteRange
putVLong
in class AbstractByteRange
index
- the index in the range where val
is storedval
- the value to storepublic abstract int putVLong(long val)
PositionedByteRange
val
at the next position as a VLongputVLong
in interface PositionedByteRange
val
- the value to storepublic PositionedByteRange get(int index, byte[] dst)
ByteRange
dst
with bytes from the range, starting from index
.get
in interface ByteRange
get
in interface PositionedByteRange
get
in class AbstractByteRange
index
- zero-based index into this range.dst
- the destination of the copy.public PositionedByteRange get(int index, byte[] dst, int offset, int length)
ByteRange
dst
with bytes from the range, starting from index
.
length
bytes are copied into dst
, starting at offset
.get
in interface ByteRange
get
in interface PositionedByteRange
get
in class AbstractByteRange
index
- zero-based index into this range.dst
- the destination of the copy.offset
- the offset into dst
to start the copy.length
- the number of bytes to copy into dst
.public short getShort()
PositionedByteRange
getShort
in interface PositionedByteRange
public int getInt()
PositionedByteRange
getInt
in interface PositionedByteRange
public long getLong()
PositionedByteRange
getLong
in interface PositionedByteRange
public long getVLong()
PositionedByteRange
getVLong
in interface PositionedByteRange
public abstract PositionedByteRange put(int index, byte val)
ByteRange
val
at index
.put
in interface ByteRange
put
in interface PositionedByteRange
put
in class AbstractByteRange
index
- the index in the range where val
is stored.val
- the value to store.public abstract PositionedByteRange put(int index, byte[] val)
ByteRange
val
at index
.put
in interface ByteRange
put
in interface PositionedByteRange
put
in class AbstractByteRange
index
- the index in the range where val
is stored.val
- the value to store.public abstract PositionedByteRange put(int index, byte[] val, int offset, int length)
ByteRange
length
bytes from val
into this range, starting at
index
. Bytes from val
are copied starting at offset
into the range.put
in interface ByteRange
put
in interface PositionedByteRange
put
in class AbstractByteRange
index
- position in this range to start the copy.val
- the value to store.offset
- the offset in val
from which to start copying.length
- the number of bytes to copy from val
.public abstract PositionedByteRange deepCopy()
ByteRange
ByteRange
with new backing byte[] containing a copy
of the content from this
range's window.deepCopy
in interface ByteRange
deepCopy
in interface PositionedByteRange
public abstract PositionedByteRange shallowCopy()
ByteRange
ByteRange
that points at this range's byte[].
Modifying the shallowCopy will modify the bytes in this range's array.
Pass over the hash code if it is already cached.shallowCopy
in interface ByteRange
shallowCopy
in interface PositionedByteRange
ByteRange
object referencing this range's byte[].public abstract PositionedByteRange shallowCopySubRange(int innerOffset, int copyLength)
ByteRange
ByteRange
that points at this range's byte[]. The new
range can have different values for offset and length, but modifying the
shallowCopy will modify the bytes in this range's array. Pass over the
hash code if it is already cached.shallowCopySubRange
in interface ByteRange
shallowCopySubRange
in interface PositionedByteRange
innerOffset
- First byte of clone will be this.offset + copyOffset.copyLength
- Number of bytes in the clone.ByteRange
object referencing this range's byte[].public PositionedByteRange setLimit(int limit)
PositionedByteRange
setLimit
in interface PositionedByteRange
public int getLimit()
PositionedByteRange
getLimit
in interface PositionedByteRange