Package org.apache.sysds.runtime.compress.colgroup.offset

## Class AOffset

- java.lang.Object
- - org.apache.sysds.runtime.compress.colgroup.offset.AOffset

All Implemented Interfaces:
  `Serializable`

Direct Known Subclasses:
  `AOffsetByte`, `OffsetChar`, `OffsetEmpty`, `OffsetSingle`, `OffsetTwo`

    public abstract class AOffset
    extends Object
    implements Serializable

Offset list encoder interface. It is assumed that the input is in sorted order, all values are positive and there are no duplicates. The no duplicate is important since 0 values are exploited to encode an offset of max representable value + 1. This gives the ability to encode data, where the offsets are greater than the available highest value that can be represented size.

See Also:
  Serialized Form

### Nested Class Summary

Nested Classes
`static class` `AOffset.OffsetSliceInfo`

### Constructor Summary

Constructors
`AOffset()`

### Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
`AOffset` `append​(AOffset t, int s)` Append the offsets from that other offset to the offsets in this.
`AOffset` `appendN​(AOffsetsGroup[] g, int s)` Append a list of offsets together in order.
`void` `cacheIterator​(AIterator it, int row)` Cache a iterator in use, note that there is no check for if the iterator is correctly positioned at the given row
`void` `constructSkipList()`
`boolean` `equals​(Object o)`
`boolean` `equals​(AOffset b)`
`abstract long` `getExactSizeOnDisk()` Remember to include the ordinal of the type of offset list.
`abstract long` `getInMemorySize()` Get the in memory size of the Offset object
`abstract AIterator` `getIterator()` Get an iterator of the offsets while also maintaining the data index pointer.
`AIterator` `getIterator​(int row)` Get an iterator that is pointing at a specific offset.
`abstract int` `getLength()` Get the length of the underlying array.
`abstract AOffsetIterator` `getOffsetIterator()` Get an OffsetIterator of current offsets not maintaining the data index.
`AOffsetIterator` `getOffsetIterator​(int row)` Get an iterator that is pointing only at offsets from specific offset
`abstract int` `getOffsetToFirst()` Get the offset to the first index
`abstract int` `getOffsetToLast()` Get the offset to the last value
`abstract int` `getSize()` Get the number of contained elements, This method iterate the entire offset list, so it is not constant lookup.
`abstract AOffset` `moveIndex​(int m)` Move the index start x cells
`void` `preAggregateDenseMap​(MatrixBlock m, double[] preAV, int rl, int ru, int cl, int cu, int nVal, AMapToData data)`
`void` `preAggregateSparseMap​(SparseBlock sb, double[] preAV, int rl, int ru, int nVal, AMapToData data)`
`static AOffset` `reverse​(int numRows, AOffset offsets)`
`AOffset.OffsetSliceInfo` `slice​(int l, int u)`
`String` `toString()`
`abstract void` `write​(DataOutput out)` Write the offsets to disk.

### Methods inherited from class java.lang.Object

`getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### AOffset

    public AOffset()

### Method Detail

#### getIterator

    public abstract AIterator getIterator()

Get an iterator of the offsets while also maintaining the data index pointer.

Returns:
  AIterator that iterate through index and dictionary offset values.

#### getOffsetIterator

    public abstract AOffsetIterator getOffsetIterator()

Get an OffsetIterator of current offsets not maintaining the data index.

Returns:
  AIterator that iterator through the delta offsets.

#### getIterator

    public AIterator getIterator​(int row)

Get an iterator that is pointing at a specific offset.

Parameters:
  `row` - The row requested.
Returns:
  AIterator that iterate through index and dictionary offset values.

#### constructSkipList

    public void constructSkipList()

#### getOffsetIterator

    public AOffsetIterator getOffsetIterator​(int row)

Get an iterator that is pointing only at offsets from specific offset

Parameters:
  `row` - The row requested.
Returns:
  AOffsetIterator that iterate through index only offset values.

#### cacheIterator

    public void cacheIterator​(AIterator it,
                              int row)

Cache a iterator in use, note that there is no check for if the iterator is correctly positioned at the given row

Parameters:
  `it` - The Iterator to cache
  `row` - The row index to cache the iterator as.

#### write

    public abstract void write​(DataOutput out)
                        throws IOException

Write the offsets to disk. If you implement another remember to write the ordinal of the new type to disk as well and add it to the OffsetFactory.

Parameters:
  `out` - The output to write to
Throws:
  `IOException` - Exception that happens if the IO fails to write.

#### getOffsetToFirst

    public abstract int getOffsetToFirst()

Get the offset to the first index

Returns:
  The first index offset

#### getOffsetToLast

    public abstract int getOffsetToLast()

Get the offset to the last value

Returns:
  The last values offset

#### getInMemorySize

    public abstract long getInMemorySize()

Get the in memory size of the Offset object

Returns:
  In memory size as a long.

#### getExactSizeOnDisk

    public abstract long getExactSizeOnDisk()

Remember to include the ordinal of the type of offset list.

Returns:
  the size on disk as a long.

#### getSize

    public abstract int getSize()

Get the number of contained elements, This method iterate the entire offset list, so it is not constant lookup.

Returns:
  The number of indexes.

#### preAggregateDenseMap

    public final void preAggregateDenseMap​(MatrixBlock m,
                                           double[] preAV,
                                           int rl,
                                           int ru,
                                           int cl,
                                           int cu,
                                           int nVal,
                                           AMapToData data)

#### preAggregateSparseMap

    public final void preAggregateSparseMap​(SparseBlock sb,
                                            double[] preAV,
                                            int rl,
                                            int ru,
                                            int nVal,
                                            AMapToData data)

#### equals

    public boolean equals​(Object o)

Overrides:
  `equals` in class `Object`

#### equals

    public boolean equals​(AOffset b)

#### moveIndex

    public abstract AOffset moveIndex​(int m)

Move the index start x cells

Parameters:
  `m` - The amount to move
Returns:
  The moved index.

#### getLength

    public abstract int getLength()

Get the length of the underlying array. This does not reflect the number of contained elements, since some of the elements can be skips.

Returns:
  The length of the underlying arrays

#### slice

    public AOffset.OffsetSliceInfo slice​(int l,
                                         int u)

#### append

    public AOffset append​(AOffset t,
                          int s)

Append the offsets from that other offset to the offsets in this.

Parameters:
  `t` - That offset/
  `s` - The total length encoded in this offset.
Returns:
  this offsets followed by thats offsets.

#### appendN

    public AOffset appendN​(AOffsetsGroup[] g,
                           int s)

Append a list of offsets together in order.

Parameters:
  `g` - The offsets to append together (note fist entry is equal to this)
  `s` - The standard size of each g (except last, but that does not matter)
Returns:
  The combined offsets.

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`

#### reverse

    public static AOffset reverse​(int numRows,
                                  AOffset offsets)