# Class LongFactor3NTTStepStrategy

java.lang.Object
org.apfloat.internal.LongElementaryModMath
org.apfloat.internal.LongModMath
org.apfloat.internal.LongFactor3NTTStepStrategy

All Implemented Interfaces:
  `Parallelizable, Factor3NTTStepStrategy`

Direct Known Subclasses:
  `LongAparapiFactor3NTTStepStrategy`

public class LongFactor3NTTStepStrategy extends LongModMath implements Factor3NTTStepStrategy, Parallelizable
Steps for the factor-3 NTT.

The transform is done using a parallel algorithm, if the data fits in memory.

All access to this class must be externally synchronized.

Since:
  1.7.0
Version:
  1.9.0
Author:
  Mikko Tommila

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `LongFactor3NTTStepStrategy()`
  Default constructor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected ParallelRunnable`
  `createColumnTransformParallelRunnable(DataStorage dataStorage0, DataStorage dataStorage1, DataStorage dataStorage2, long startColumn, long columns, long power2length, long length, boolean isInverse, int modulus)`
  Create a ParallelRunnable object for transforming the columns of the matrix using a 3-point NTT transform.
  `long`
  `getMaxTransformLength()`
  Get the maximum transform length.
  `void`
  `transformColumns(DataStorage dataStorage0, DataStorage dataStorage1, DataStorage dataStorage2, long startColumn, long columns, long power2length, long length, boolean isInverse, int modulus)`
  Transform the columns of a matrix using a 3-point transform.

  ### Methods inherited from class LongModMath

  `createWTable, getForwardNthRoot, getInverseNthRoot, modDivide, modInverse, modPow, negate`

  ### Methods inherited from class LongElementaryModMath

  `getModulus, modAdd, modMultiply, modSubtract, setModulus`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### LongFactor3NTTStepStrategy

    public LongFactor3NTTStepStrategy()
    Default constructor.

- ## Method Details

  - ### transformColumns

    public void transformColumns(DataStorage dataStorage0, DataStorage dataStorage1, DataStorage dataStorage2, long startColumn, long columns, long power2length, long length, boolean isInverse, int modulus) throws ApfloatRuntimeException
    Description copied from interface: `Factor3NTTStepStrategy`
    Transform the columns of a matrix using a 3-point transform.
    Specified by:
      `transformColumns` in interface `Factor3NTTStepStrategy`
    Parameters:
      `dataStorage0` - The data of the first column.
      `dataStorage1` - The data of the second column.
      `dataStorage2` - The data of the third column.
      `startColumn` - The starting element index in the data storages to transform.
      `columns` - How many columns to transform.
      `power2length` - Length of the column transform.
      `length` - Length of total transform (three times the length of one column).
      `isInverse` - `true` if an inverse transform is performed, `false` if a forward transform is performed.
      `modulus` - Index of the modulus.
    Throws:
      `ApfloatRuntimeException`

  - ### getMaxTransformLength

    public long getMaxTransformLength()
    Description copied from interface: `Factor3NTTStepStrategy`
    Get the maximum transform length.
    Specified by:
      `getMaxTransformLength` in interface `Factor3NTTStepStrategy`
    Returns:
      The maximum transform length.

  - ### createColumnTransformParallelRunnable

    protected ParallelRunnable createColumnTransformParallelRunnable(DataStorage dataStorage0, DataStorage dataStorage1, DataStorage dataStorage2, long startColumn, long columns, long power2length, long length, boolean isInverse, int modulus)
    Create a ParallelRunnable object for transforming the columns of the matrix using a 3-point NTT transform.
    Parameters:
      `dataStorage0` - The data of the first column.
      `dataStorage1` - The data of the second column.
      `dataStorage2` - The data of the third column.
      `startColumn` - The starting element index in the data storages to transform.
      `columns` - How many columns to transform.
      `power2length` - Length of the column transform.
      `length` - Length of total transform (three times the length of one column).
      `isInverse` - `true` if an inverse transform is performed, `false` if a forward transform is performed.
      `modulus` - Index of the modulus.
    Returns:
      A suitable object for performing the 3-point transforms in parallel.