Interface Positional

  • All Superinterfaces:
    AutoCloseable, Resource
    All Known Subinterfaces:
    Buffer, WritableBuffer

    public interface Positional
    extends Resource
    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 Detail

      • incrementPosition

        Positional incrementPosition​(long increment)
        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

        Positional setPosition​(long position)
        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

        Positional setStartPositionEnd​(long start,
                                       long position,
                                       long end)
        Sets start position, current position, and end position. Checks that the positional invariants are not violated.
        Parameters:
        start - the start position in the buffer
        position - the current position between the start and end
        end - the end position in the buffer
        Returns:
        this Positional
        Throws:
        BufferPositionInvariantsException - if positional invariants have been violated.