Class ArrayAccess

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.AutoCloseable
    Direct Known Subclasses:
    DoubleMemoryArrayAccess, FloatMemoryArrayAccess, IntMemoryArrayAccess, LongMemoryArrayAccess

    public abstract class ArrayAccess
    extends java.lang.Object
    implements java.io.Serializable, java.lang.AutoCloseable
    The ArrayAccess class simulates a C language pointer. With one ArrayAccess object you can point to a location within an array. You can easily add or subtract a value to this "pointer", thus essentially emulating C pointer arithmetic. An ArrayAccess provides an array, the starting index within that array and the length of accessible data within the array, all in one convenient package.

    Just like pointers in the C language, ArrayAccess objects are inherently unsafe and must be used cautiously. It is the responsibility of the user of an ArrayAccess object to make sure that he doesn't access the provided array outside the allowed range. The ArrayAccess object itself does nothing to enforce this, except of course the mandatory bounds check of Java, which can throw an ArrayIndexOutOfBoundsException.

    Version:
    1.9.0
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected ArrayAccess​(int offset, int length)
      Create an array access.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      abstract void close()
      Close this array access and commit any changes to the underlying data storage if applicable.
      abstract java.lang.Object getData()
      Returns the array of this array access.
      double[] getDoubleData()
      Returns the array of this array access as a double[].
      float[] getFloatData()
      Returns the array of this array access as a float[].
      int[] getIntData()
      Returns the array of this array access as an int[].
      int getLength()
      Returns the length of the access segment within the backing array.
      long[] getLongData()
      Returns the array of this array access as a long[].
      int getOffset()
      Returns the offset of the access segment within the backing array.
      abstract ArrayAccess subsequence​(int offset, int length)
      Create a sub-sequence view of this array access.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • offset

        private int offset
      • length

        private int length
    • Constructor Detail

      • ArrayAccess

        protected ArrayAccess​(int offset,
                              int length)
        Create an array access.

        Parameters:
        offset - The offset of the access segment within the array.
        length - The access segment.
    • Method Detail

      • subsequence

        public abstract ArrayAccess subsequence​(int offset,
                                                int length)
        Create a sub-sequence view of this array access.

        Note that the changes done to the sub-sequence array are not necessarily committed to the underlying data storage when the sub-sequence is closed (with close()), but only when the "base" ArrayAccess is closed.

        Parameters:
        offset - The sub-sequence starting offset within this ArrayAccess.
        length - The sub-sequence length.
        Returns:
        The sub-sequence array access.
      • getData

        public abstract java.lang.Object getData()
                                          throws ApfloatRuntimeException
        Returns the array of this array access. This is an array of a primitive type, depending on the implementation class.
        Returns:
        The backing array of this array access.
        Throws:
        ApfloatRuntimeException
      • getIntData

        public int[] getIntData()
                         throws java.lang.UnsupportedOperationException,
                                ApfloatRuntimeException
        Returns the array of this array access as an int[].
        Returns:
        The backing array of this array access.
        Throws:
        java.lang.UnsupportedOperationException - In case the backing array can't be presented as int[].
        ApfloatRuntimeException
      • getLongData

        public long[] getLongData()
                           throws java.lang.UnsupportedOperationException,
                                  ApfloatRuntimeException
        Returns the array of this array access as a long[].
        Returns:
        The backing array of this array access.
        Throws:
        java.lang.UnsupportedOperationException - In case the backing array can't be presented as long[].
        ApfloatRuntimeException
      • getFloatData

        public float[] getFloatData()
                             throws java.lang.UnsupportedOperationException,
                                    ApfloatRuntimeException
        Returns the array of this array access as a float[].
        Returns:
        The backing array of this array access.
        Throws:
        java.lang.UnsupportedOperationException - In case the backing array can't be presented as float[].
        ApfloatRuntimeException
      • getDoubleData

        public double[] getDoubleData()
                               throws java.lang.UnsupportedOperationException,
                                      ApfloatRuntimeException
        Returns the array of this array access as a double[].
        Returns:
        The backing array of this array access.
        Throws:
        java.lang.UnsupportedOperationException - In case the backing array can't be presented as double[].
        ApfloatRuntimeException
      • getOffset

        public int getOffset()
        Returns the offset of the access segment within the backing array.
        Returns:
        The starting index within the backing array that is allowed to be accessed.
      • getLength

        public int getLength()
        Returns the length of the access segment within the backing array.
        Returns:
        The number of elements within the backing array that is allowed to be accessed.
      • close

        public abstract void close()
                            throws ApfloatRuntimeException
        Close this array access and commit any changes to the underlying data storage if applicable.

        If the ArrayAccess was obtained in write mode, the changes are saved to the data storage. Note that even if the ArrayAccess was obtained for reading only, any changes made to the array data may still be committed to the data storage.

        Note that changes done to a sub-sequence array are not necessarily committed to the underlying data storage when the sub-sequence is closed, but only when the "base" ArrayAccess is closed.

        Specified by:
        close in interface java.lang.AutoCloseable
        Throws:
        ApfloatRuntimeException