Class MultidimensionalCounter
java.lang.Object
org.apache.commons.numbers.arrays.MultidimensionalCounter
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
FieldsModifier and TypeFieldDescriptionprivate 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 -
Method Summary
Modifier and TypeMethodDescriptionprivate 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
getSize()
Gets the total number of elements.int[]
getSizes()
Gets the number of multidimensional counter slots in each dimension.static MultidimensionalCounter
of
(int... size) Creates a counter.int[]
toMulti
(int index) Converts to a multidimensional counter.toString()
int
toUni
(int... c) Converts to a unidimensional counter.
-
Field Details
-
dimension
private final int dimensionNumber of dimensions. -
uniCounterOffset
private final int[] uniCounterOffsetOffset for each dimension. -
size
private final int[] sizeCounter sizes. -
totalSize
private final int totalSizeTotal number of (one-dimensional) slots. -
last
private final int lastIndex 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
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
- ifindex
is not between0
and the value returned bygetSize()
(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 ofc
does not match the size of the array given in the constructor.IndexOutOfBoundsException
- if a value ofc
is not in the range of the corresponding dimension, as defined in theconstructor
.
-
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
-
checkStrictlyPositive
Check the size is strictly positive:size > 0
.- Parameters:
name
- the name of the sizesize
- the size
-
createIndexOutOfBoundsMessage
Creates the message for the index out of bounds exception.- Parameters:
size
- the sizeindex
- the index- Returns:
- the message
-