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