Class MultidimensionalCounter

  • All Implemented Interfaces:
    Iterable<Integer>

    public class MultidimensionalCounter
    extends Object
    implements Iterable<Integer>
    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
    Since:
    2.2
    • Constructor Detail

      • MultidimensionalCounter

        public MultidimensionalCounter​(int... size)
        Create a counter.
        Parameters:
        size - Counter sizes (number of slots in each dimension).
        Throws:
        NotStrictlyPositiveException - if one of the sizes is negative or zero.
    • Method Detail

      • getDimension

        public int getDimension()
        Get the number of dimensions of the multidimensional counter.
        Returns:
        the number of dimensions.
      • getCounts

        public int[] getCounts​(int index)
        Convert to multidimensional counter.
        Parameters:
        index - Index in unidimensional counter.
        Returns:
        the multidimensional counts.
        Throws:
        OutOfRangeException - if index is not between 0 and the value returned by getSize() (excluded).
      • getCount

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

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

        public int[] getSizes()
        Get the number of multidimensional counter slots in each dimension.
        Returns:
        the sizes of the multidimensional counter in each dimension.