org.apache.commons.math3.util
Class MultidimensionalCounter

java.lang.Object
  extended by org.apache.commons.math3.util.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:

Since:
2.2
Version:
$Id$

Nested Class Summary
 class MultidimensionalCounter.Iterator
          Perform iteration over the multidimensional counter.
 
Field Summary
private  int dimension
          Number of dimensions.
private  int last
          Index of last dimension.
private  int[] size
          Counter sizes.
private  int totalSize
          Total number of (one-dimensional) slots.
private  int[] uniCounterOffset
          Offset for each dimension.
 
Constructor Summary
MultidimensionalCounter(int... size)
          Create a counter.
 
Method Summary
 int getCount(int... c)
          Convert to unidimensional counter.
 int[] getCounts(int index)
          Convert to multidimensional counter.
 int getDimension()
          Get the number of dimensions of the multidimensional counter.
 int getSize()
          Get the total number of elements.
 int[] getSizes()
          Get the number of multidimensional counter slots in each dimension.
 MultidimensionalCounter.Iterator iterator()
          Create an iterator over this counter.
 String toString()
          
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

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 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

iterator

public MultidimensionalCounter.Iterator iterator()
Create an iterator over this counter.

Specified by:
iterator in interface Iterable<Integer>
Returns:
the iterator.

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.

toString

public String toString()

Overrides:
toString in class Object


Copyright (c) 2003-2013 Apache Software Foundation