Package org.apache.datasketches.memory
Interface Positional
- All Known Subinterfaces:
Buffer
,WritableBuffer
public interface Positional
Defines the relative positional API.
This is different from and simpler than Java ByteBuffer positional API.
- All based on longs instead of ints.
- Eliminated "mark". Rarely used and confusing with its silent side effects.
- The invariants are
0 <= start <= position <= end <= capacity
. - It always starts up as (0, 0, capacity, capacity).
- You set (start, position, end) in one call with
setStartPositionEnd(long, long, long)
- Position can be set directly or indirectly when using the positional get/put methods.
- Added incrementPosition(long), which is much easier when you know the increment.
- This approach eliminated a number of methods and checks, and has no unseen side effects, e.g., mark being invalidated.
- Clearer method naming (IMHO).
- Author:
- Lee Rhodes
-
Method Summary
Modifier and TypeMethodDescriptionlong
getEnd()
Gets the end positionlong
Gets the current positionlong
The number of elements remaining between the current position and the end positionlong
getStart()
Gets start positionboolean
Returns true if there are elements remaining between the current position and the end positionincrementPosition
(long increment) Increments the current position by the given increment.Resets the current position to the start position, This does not modify any data.setPosition
(long position) Sets the current position.setStartPositionEnd
(long start, long position, long end) Sets start position, current position, and end position.
-
Method Details
-
incrementPosition
Increments the current position by the given increment. Checks that the resource is alive and that the positional invariants are not violated.- Parameters:
increment
- the given increment- Returns:
- this Positional
- Throws:
BufferPositionInvariantsException
- if positional invariants have been violated.
-
getEnd
long getEnd()Gets the end position- Returns:
- the end position
-
getPosition
long getPosition()Gets the current position- Returns:
- the current position
-
getStart
long getStart()Gets start position- Returns:
- start position
-
getRemaining
long getRemaining()The number of elements remaining between the current position and the end position- Returns:
(end - position)
-
hasRemaining
boolean hasRemaining()Returns true if there are elements remaining between the current position and the end position- Returns:
(end - position) > 0
-
resetPosition
Positional resetPosition()Resets the current position to the start position, This does not modify any data.- Returns:
- this Positional
-
setPosition
Sets the current position. Checks that the positional invariants are not violated.- Parameters:
position
- the given current position.- Returns:
- this Positional
- Throws:
BufferPositionInvariantsException
- if positional invariants have been violated.
-
setStartPositionEnd
Sets start position, current position, and end position. Checks that the positional invariants are not violated.- Parameters:
start
- the start position in the bufferposition
- the current position between the start and endend
- the end position in the buffer- Returns:
- this Positional
- Throws:
BufferPositionInvariantsException
- if positional invariants have been violated.
-