Class Range

  • All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    DateRange

    public class Range
    extends java.lang.Object
    implements java.io.Serializable
    Represents an immutable range of values.
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private double lower
      The lower bound of the range.
      private static long serialVersionUID
      For serialization.
      private double upper
      The upper bound of the range.
    • Constructor Summary

      Constructors 
      Constructor Description
      Range​(double lower, double upper)
      Creates a new range.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static Range combine​(Range range1, Range range2)
      Creates a new range by combining two existing ranges.
      static Range combineIgnoringNaN​(Range range1, Range range2)
      Returns a new range that spans both range1 and range2.
      double constrain​(double value)
      Returns the value within the range that is closest to the specified value.
      boolean contains​(double value)
      Returns true if the range contains the specified value and false otherwise.
      boolean equals​(java.lang.Object obj)
      Tests this object for equality with an arbitrary object.
      static Range expand​(Range range, double lowerMargin, double upperMargin)
      Creates a new range by adding margins to an existing range.
      static Range expandToInclude​(Range range, double value)
      Returns a range that includes all the values in the specified range AND the specified value.
      double getCentralValue()
      Returns the central value for the range.
      double getLength()
      Returns the length of the range.
      double getLowerBound()
      Returns the lower bound for the range.
      double getUpperBound()
      Returns the upper bound for the range.
      int hashCode()
      Returns a hash code.
      boolean intersects​(double b0, double b1)
      Returns true if the range intersects with the specified range, and false otherwise.
      boolean intersects​(Range range)
      Returns true if the range intersects with the specified range, and false otherwise.
      boolean isNaNRange()
      Returns true if both the lower and upper bounds are Double.NaN, and false otherwise.
      private static double max​(double d1, double d2)  
      private static double min​(double d1, double d2)
      Returns the minimum value.
      static Range scale​(Range base, double factor)
      Scales the range by the specified factor.
      static Range shift​(Range base, double delta)
      Shifts the range by the specified amount.
      static Range shift​(Range base, double delta, boolean allowZeroCrossing)
      Shifts the range by the specified amount.
      private static double shiftWithNoZeroCrossing​(double value, double delta)
      Returns the given value adjusted by delta but with a check to prevent the result from crossing 0.0.
      java.lang.String toString()
      Returns a string representation of this Range.
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • serialVersionUID

        private static final long serialVersionUID
        For serialization.
        See Also:
        Constant Field Values
      • lower

        private double lower
        The lower bound of the range.
      • upper

        private double upper
        The upper bound of the range.
    • Constructor Detail

      • Range

        public Range​(double lower,
                     double upper)
        Creates a new range.
        Parameters:
        lower - the lower bound (must be <= upper bound).
        upper - the upper bound (must be >= lower bound).
    • Method Detail

      • getLowerBound

        public double getLowerBound()
        Returns the lower bound for the range.
        Returns:
        The lower bound.
      • getUpperBound

        public double getUpperBound()
        Returns the upper bound for the range.
        Returns:
        The upper bound.
      • getLength

        public double getLength()
        Returns the length of the range.
        Returns:
        The length.
      • getCentralValue

        public double getCentralValue()
        Returns the central value for the range.
        Returns:
        The central value.
      • contains

        public boolean contains​(double value)
        Returns true if the range contains the specified value and false otherwise.
        Parameters:
        value - the value to lookup.
        Returns:
        true if the range contains the specified value.
      • intersects

        public boolean intersects​(double b0,
                                  double b1)
        Returns true if the range intersects with the specified range, and false otherwise.
        Parameters:
        b0 - the lower bound (should be <= b1).
        b1 - the upper bound (should be >= b0).
        Returns:
        A boolean.
      • intersects

        public boolean intersects​(Range range)
        Returns true if the range intersects with the specified range, and false otherwise.
        Parameters:
        range - another range (null not permitted).
        Returns:
        A boolean.
      • constrain

        public double constrain​(double value)
        Returns the value within the range that is closest to the specified value.
        Parameters:
        value - the value.
        Returns:
        The constrained value.
      • combine

        public static Range combine​(Range range1,
                                    Range range2)
        Creates a new range by combining two existing ranges.

        Note that:

        • either range can be null, in which case the other range is returned;
        • if both ranges are null the return value is null.
        Parameters:
        range1 - the first range (null permitted).
        range2 - the second range (null permitted).
        Returns:
        A new range (possibly null).
      • combineIgnoringNaN

        public static Range combineIgnoringNaN​(Range range1,
                                               Range range2)
        Returns a new range that spans both range1 and range2. This method has a special handling to ignore Double.NaN values.
        Parameters:
        range1 - the first range (null permitted).
        range2 - the second range (null permitted).
        Returns:
        A new range (possibly null).
      • min

        private static double min​(double d1,
                                  double d2)
        Returns the minimum value. If either value is NaN, the other value is returned. If both are NaN, NaN is returned.
        Parameters:
        d1 - value 1.
        d2 - value 2.
        Returns:
        The minimum of the two values.
      • max

        private static double max​(double d1,
                                  double d2)
      • expandToInclude

        public static Range expandToInclude​(Range range,
                                            double value)
        Returns a range that includes all the values in the specified range AND the specified value.
        Parameters:
        range - the range (null permitted).
        value - the value that must be included.
        Returns:
        A range.
      • expand

        public static Range expand​(Range range,
                                   double lowerMargin,
                                   double upperMargin)
        Creates a new range by adding margins to an existing range.
        Parameters:
        range - the range (null not permitted).
        lowerMargin - the lower margin (expressed as a percentage of the range length).
        upperMargin - the upper margin (expressed as a percentage of the range length).
        Returns:
        The expanded range.
      • shift

        public static Range shift​(Range base,
                                  double delta)
        Shifts the range by the specified amount.
        Parameters:
        base - the base range (null not permitted).
        delta - the shift amount.
        Returns:
        A new range.
      • shift

        public static Range shift​(Range base,
                                  double delta,
                                  boolean allowZeroCrossing)
        Shifts the range by the specified amount.
        Parameters:
        base - the base range (null not permitted).
        delta - the shift amount.
        allowZeroCrossing - a flag that determines whether or not the bounds of the range are allowed to cross zero after adjustment.
        Returns:
        A new range.
      • shiftWithNoZeroCrossing

        private static double shiftWithNoZeroCrossing​(double value,
                                                      double delta)
        Returns the given value adjusted by delta but with a check to prevent the result from crossing 0.0.
        Parameters:
        value - the value.
        delta - the adjustment.
        Returns:
        The adjusted value.
      • scale

        public static Range scale​(Range base,
                                  double factor)
        Scales the range by the specified factor.
        Parameters:
        base - the base range (null not permitted).
        factor - the scaling factor (must be non-negative).
        Returns:
        A new range.
      • equals

        public boolean equals​(java.lang.Object obj)
        Tests this object for equality with an arbitrary object.
        Overrides:
        equals in class java.lang.Object
        Parameters:
        obj - the object to test against (null permitted).
        Returns:
        A boolean.
      • isNaNRange

        public boolean isNaNRange()
        Returns true if both the lower and upper bounds are Double.NaN, and false otherwise.
        Returns:
        A boolean.
      • hashCode

        public int hashCode()
        Returns a hash code.
        Overrides:
        hashCode in class java.lang.Object
        Returns:
        A hash code.
      • toString

        public java.lang.String toString()
        Returns a string representation of this Range.
        Overrides:
        toString in class java.lang.Object
        Returns:
        A String "Range[lower,upper]" where lower=lower range and upper=upper range.