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
     
    private final int
     
    private final int
     
    private final int
     
    private int
     
  • 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
    Sets all counters to zero.
    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
    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