Package net.sourceforge.jiu.color.data

# Class OnDemandHistogram3D

java.lang.Object
net.sourceforge.jiu.color.data.OnDemandHistogram3D

All Implemented Interfaces:
  `Histogram3D`

public class OnDemandHistogram3D extends Object implements Histogram3D
A data class for a three-dimensional histogram, creating counters on demand only, not allocating counters for all possible entries at the beginning. The creation on demand happens to save space.

Note: Rewrote from scratch for version 0.15.0 to use hash tables instead of int arrays. New version creates and throws away a lot of objects, which had been a problem with early JVMs but should be OK these days.

Author:
  Marco Schmidt

## Field Summary

Fields
Modifier and Type
Field
Description
`private Hashtable`
`hash`
`private final int`
`maxValue1`
`private final int`
`maxValue2`
`private final int`
`maxValue3`
`private int`
`numUniqueValues`

## Constructor Summary

Constructors
Constructor
Description
`OnDemandHistogram3D(int max1, int max2, int max3)`
Creates a new histogram, internally creates the hash table for triplet values.

## Method Summary

Modifier and Type
Method
Description
`void`
`clear()`
Sets all counters to zero.
`private Histogram3DNode`
`createNode(int v1, int v2, int v3)`
`int`
`getEntry(int index1, int index2, int index3)`
Returns the counter value of (index1, index2, index3).
`int`
`getMaxValue(int index)`
Returns the maximum index value for one of the three indexes.
`int`
`getNumUsedEntries()`
Returns the number of used entries (those entries with a counter value larger than zero).
`void`
`increaseEntry(int index1, int index2, int index3)`
Increases the counter value of (index1, index2, index3) by one.
`void`
`setEntry(int index1, int index2, int index3, int newValue)`
Sets the counter value of (index1, index2, index3) to newValue.

### Methods inherited from class java.lang.Object

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

## Field Details

### hash

private Hashtable hash

### numUniqueValues

private int numUniqueValues

### maxValue1

private final int maxValue1

### maxValue2

private final int maxValue2

### maxValue3

private final int maxValue3

## Constructor Details

### OnDemandHistogram3D

public OnDemandHistogram3D(int max1, int max2, int max3)
Creates a new histogram, internally creates the hash table for triplet values.

## Method Details

### clear

public void clear()
Description copied from interface: `Histogram3D`
Sets all counters to zero.

Specified by:
  `clear` in interface `Histogram3D`

### createNode

private Histogram3DNode createNode(int v1, int v2, int v3)

### getEntry

public int getEntry(int index1, int index2, int index3)
Description copied from interface: `Histogram3D`
Returns the counter value of (index1, index2, index3).

Specified by:
  `getEntry` in interface `Histogram3D`
Parameters:
  `index1` - first of the three values forming the threedimensional index
  `index2` - second of the three values forming the threedimensional index
  `index3` - three of the three values forming the threedimensional index
Returns:
  the counter value of the desired index

### getMaxValue

public int getMaxValue(int index) throws IllegalArgumentException
Description copied from interface: `Histogram3D`
Returns the maximum index value for one of the three indexes.

Specified by:
  `getMaxValue` in interface `Histogram3D`
Throws:
  `IllegalArgumentException` - if the index formed by the arguments is invalid

### getNumUsedEntries

public int getNumUsedEntries()
Description copied from interface: `Histogram3D`
Returns the number of used entries (those entries with a counter value larger than zero).

Specified by:
  `getNumUsedEntries` in interface `Histogram3D`
Returns:
  number of non-zero counter values

### increaseEntry

public void increaseEntry(int index1, int index2, int index3)
Description copied from interface: `Histogram3D`
Increases the counter value of (index1, index2, index3) by one. This method can be implemented by the one-liner `setEntry(index1, index2, index3, getEntry(index1, index2, index3) + 1);` However, implementations of this method may take advantage of implementation details to provide a more efficient approach.

Specified by:
  `increaseEntry` in interface `Histogram3D`
Parameters:
  `index1` - first of the three values forming the threedimensional index
  `index2` - second of the three values forming the threedimensional index
  `index3` - three of the three values forming the threedimensional index

### setEntry

public void setEntry(int index1, int index2, int index3, int newValue)
Description copied from interface: `Histogram3D`
Sets the counter value of (index1, index2, index3) to newValue.

Specified by:
  `setEntry` in interface `Histogram3D`
Parameters:
  `index1` - first of the three values forming the threedimensional index
  `index2` - second of the three values forming the threedimensional index
  `index3` - three of the three values forming the threedimensional index
  `newValue` - the counter value that is assigned to the argument index