Class MultidimensionalCounter

java.lang.Object
org.apache.commons.numbers.arrays.MultidimensionalCounter

public final class MultidimensionalCounter extends Object
Converter between unidimensional storage structure and multidimensional conceptual structure. This utility will convert from indices in a multidimensional structure to the corresponding index in a one-dimensional array. For example, assuming that the ranges (in 3 dimensions) of indices are 2, 4 and 3, the following correspondences, between 3-tuples indices and unidimensional indices, will hold:
  • (0, 0, 0) corresponds to 0
  • (0, 0, 1) corresponds to 1
  • (0, 0, 2) corresponds to 2
  • (0, 1, 0) corresponds to 3
  • ...
  • (1, 0, 0) corresponds to 12
  • ...
  • (1, 3, 2) corresponds to 23
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final int
    Number of dimensions.
    private final int
    Index of last dimension.
    private final int[]
    Counter sizes.
    private final int
    Total number of (one-dimensional) slots.
    private final int[]
    Offset for each dimension.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    private
    Creates a counter.
  • Method Summary

    Modifier and Type
    Method
    Description
    private static void
    checkStrictlyPositive(String name, int size)
    Check the size is strictly positive: size > 0.
    private static String
    createIndexOutOfBoundsMessage(int size, int index)
    Creates the message for the index out of bounds exception.
    int
    Gets the number of dimensions of the multidimensional counter.
    int
    Gets the total number of elements.
    int[]
    Gets the number of multidimensional counter slots in each dimension.
    of(int... size)
    Creates a counter.
    int[]
    toMulti(int index)
    Converts to a multidimensional counter.
    int
    toUni(int... c)
    Converts to a unidimensional counter.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • dimension

      private final int dimension
      Number of dimensions.
    • uniCounterOffset

      private final int[] uniCounterOffset
      Offset for each dimension.
    • size

      private final int[] size
      Counter sizes.
    • totalSize

      private final int totalSize
      Total number of (one-dimensional) slots.
    • last

      private final int last
      Index of last dimension.
  • Constructor Details

    • MultidimensionalCounter

      private MultidimensionalCounter(int... size)
      Creates a counter.
      Parameters:
      size - Counter sizes (number of slots in each dimension).
      Throws:
      IllegalArgumentException - if one of the sizes is negative or zero.
  • Method Details

    • of

      public static MultidimensionalCounter of(int... size)
      Creates a counter.
      Parameters:
      size - Counter sizes (number of slots in each dimension).
      Returns:
      a new instance.
      Throws:
      IllegalArgumentException - if one of the sizes is negative or zero.
    • getDimension

      public int getDimension()
      Gets the number of dimensions of the multidimensional counter.
      Returns:
      the number of dimensions.
    • toMulti

      public int[] toMulti(int index)
      Converts to a multidimensional counter.
      Parameters:
      index - Index in unidimensional counter.
      Returns:
      the multidimensional counts.
      Throws:
      IndexOutOfBoundsException - if index is not between 0 and the value returned by getSize() (excluded).
    • toUni

      public int toUni(int... c)
      Converts to a unidimensional counter.
      Parameters:
      c - Indices in multidimensional counter.
      Returns:
      the index within the unidimensionl counter.
      Throws:
      IllegalArgumentException - if the size of c does not match the size of the array given in the constructor.
      IndexOutOfBoundsException - if a value of c is not in the range of the corresponding dimension, as defined in the constructor.
    • getSize

      public int getSize()
      Gets the total number of elements.
      Returns:
      the total size of the unidimensional counter.
    • getSizes

      public int[] getSizes()
      Gets the number of multidimensional counter slots in each dimension.
      Returns:
      the number of slots in each dimension.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • checkStrictlyPositive

      private static void checkStrictlyPositive(String name, int size)
      Check the size is strictly positive: size > 0.
      Parameters:
      name - the name of the size
      size - the size
    • createIndexOutOfBoundsMessage

      private static String createIndexOutOfBoundsMessage(int size, int index)
      Creates the message for the index out of bounds exception.
      Parameters:
      size - the size
      index - the index
      Returns:
      the message