Class ScaleFactor

java.lang.Object
org.openjdk.jmc.common.unit.ScaleFactor
All Implemented Interfaces:
Comparable<ScaleFactor>, IScalarAffineTransform
Direct Known Subclasses:
BinaryScaleFactor, DecimalScaleFactor, ImpreciseScaleFactor, LongScaleFactor

public abstract class ScaleFactor extends Object implements IScalarAffineTransform, Comparable<ScaleFactor>
A linear transform, that is, a scale factor.

Note: This class has a natural ordering that is inconsistent with equals. (This is because in a certain subclass, ImpreciseScaleFactor, different instances may express the same scale factor with different precision.)

  • Constructor Details

    • ScaleFactor

      public ScaleFactor()
  • Method Details

    • concat

      public final IScalarAffineTransform concat(IScalarAffineTransform innerTransform)
      Description copied from interface: IScalarAffineTransform
      Concatenate this transform with innerTransform, such that applying the resulting transform is equivalent to first applying innerTransform and then applying this transform on the resulting value. That is, R(v) = T(I(v)), where R(v) is the resulting transform, T(v) is this transform, and I(v) is innerTransform.

      In this snippet, v1 and v2 should be equal, apart from numerical precision, for any v.

       IScalarAffineTransform R, T = ..., I = ...;
       double v = ...;
      
       R = T.concat(I);
       double v1 = R.targetValue(v);
       double v2 = T.targetValue(I.targetValue(v));
       

      Specified by:
      concat in interface IScalarAffineTransform
      Parameters:
      innerTransform - the transform that should be applied before this transform
      Returns:
      the concatenated transform
    • concat

      public abstract ScaleFactor concat(ScaleFactor innerFactor)
      Concatenate (that is, multiply) this scale factor with innerFactor. This is just a special case of concat(IScalarAffineTransform).
      Returns:
      the combined scale factor
      See Also:
    • invertAndConcat

      public final IScalarAffineTransform invertAndConcat(IScalarAffineTransform innerTransform)
      Description copied from interface: IScalarAffineTransform
      Concatenate the inverse of this transform with innerTransform, such that applying the resulting transform is equivalent to first applying innerTransform and then applying this inverse of this transform on the resulting value. That is, R(v) = T-1(I(v)), where R(v) is the resulting transform, T-1(v) is the inverse of this transform, and I(v) is innerTransform.

      In this snippet, v1 and v2 should be equal, apart from numerical precision, for any v.

       IScalarAffineTransform R, T = ..., I = ...;
       double v = ...;
      
       R = T.invertAndConcat(I);
       double v1 = R.targetValue(v);
       double v2 = T.invert().targetValue(I.targetValue(v));
       

      Specified by:
      invertAndConcat in interface IScalarAffineTransform
      Parameters:
      innerTransform - the transform that should be applied before this transform
      Returns:
      the concatenated transform
    • invertAndConcat

      public ScaleFactor invertAndConcat(ScaleFactor innerFactor)
      Concatenate (that is, multiply) the inverse of this scale factor with innerFactor. This is just a special case of invertAndConcat(IScalarAffineTransform).
      Returns:
      the combined scale factor
      See Also:
    • invert

      public abstract ScaleFactor invert()
      Specified by:
      invert in interface IScalarAffineTransform
      Returns:
      the inverse transform
    • getOffset

      public final double getOffset()
      Specified by:
      getOffset in interface IScalarAffineTransform
      Returns:
      the offset to be added (after the source value has been multiplied with the multiplier)
    • targetFloor

      public double targetFloor(double srcNumericalValue)
      Specified by:
      targetFloor in interface IScalarAffineTransform
      Parameters:
      srcNumericalValue - a numerical quantity value, expressed in the source unit
      Returns:
      the floor of the corresponding numerical quantity value, when expressed in the target unit
    • targetIntFloor

      public int targetIntFloor(Number srcNumericalValue)
      Specified by:
      targetIntFloor in interface IScalarAffineTransform
      Parameters:
      srcNumericalValue - a numerical quantity value, expressed in the source unit
      Returns:
      the floor of the corresponding numerical quantity value, when expressed in the target unit, clamped to an int
    • targetNumber

      public Number targetNumber(long srcNumericalValue)
      Specified by:
      targetNumber in interface IScalarAffineTransform
      Parameters:
      srcNumericalValue - an exact numerical quantity value, expressed in the source unit
      Returns:
      the corresponding numerical quantity value, when expressed in the target unit, as a Long if it can exactly be represented in one, otherwise as some other Number with at least the precision of double
    • scale

      public ScaleFactor scale(long multiplier)
    • targetNumber

      public Number targetNumber(Number srcNumericalValue)
      Specified by:
      targetNumber in interface IScalarAffineTransform
      Parameters:
      srcNumericalValue - an exact or inexact numerical quantity value, expressed in the source unit
      Returns:
      the corresponding numerical quantity value, when expressed in the target unit, as a Long if it can exactly be represented in one, otherwise as some other Number with at least the precision of double
    • compareTo

      public int compareTo(ScaleFactor other)
      Specified by:
      compareTo in interface Comparable<ScaleFactor>
    • equals

      public abstract boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public abstract int hashCode()
      Overrides:
      hashCode in class Object