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); } }