package tim.prune.data;
/**
* Represents a range of doubles, holding the maximum and
* minimum values. Values can be positive or negative
*/
public class DoubleRange
{
private boolean _empty = true;
private double _min = 0.0, _max = 0.0;
/** Empty constructor, cleared to zeroes */
public DoubleRange() {}
/**
* Constructor giving two initial values
* @param inValue1 first value
* @param inValue2 second value
*/
public DoubleRange(double inValue1, double inValue2)
{
addValue(inValue1);
addValue(inValue2);
}
/**
* Clear for a new calculation
*/
public void clear()
{
_min = _max = 0.0;
_empty = true;
}
/**
* Add a value to the range
* @param inValue value to add
*/
public void addValue(double inValue)
{
if (inValue < _min || _empty) _min = inValue;
if (inValue > _max || _empty) _max = inValue;
_empty = false;
}
/**
* Combine this range with another one
* @param inOtherRange other range to add to this one
*/
public void combine(DoubleRange inOtherRange)
{
if (inOtherRange != null && inOtherRange.getRange() > 1.0)
{
addValue(inOtherRange.getMinimum());
addValue(inOtherRange.getMaximum());
}
}
/**
* @return true if data values were found
*/
public boolean hasData()
{
return (!_empty);
}
/**
* @return minimum value, or 0.0 if none found
*/
public double getMinimum()
{
return _min;
}
/**
* @return maximum value, or 0.0 if none found
*/
public double getMaximum()
{
return _max;
}
/**
* @return range, as maximum - minimum
*/
public double getRange()
{
return _max - _min;
}
/**
* @return mid value, halfway between min and max
*/
public double getMidValue()
{
return (_max + _min) / 2.0;
}
/**
* Copy this range into a new object, which can then be modified without changing this one
* @return deep copy of this object
*/
public DoubleRange copy()
{
if (_empty) return new DoubleRange();
return new DoubleRange(_min, _max);
}
}