sclass LowestDouble { double best = Double.NaN; transient O onChange; synchronized bool isNewBest(double d) { ret isNaN(best) || d < best; } // may return NaN double get() { ret best; } bool put(double d) { bool change; synchronized(this) { if (isNaN(best) || d < best) { best = d; set change; } } if (change) pcallF(onChange); ret change; } synchronized void clear() { best = Double.NaN; } synchronized bool has() { ret !isNaN(best); } synchronized toString { ret has() ? str(best) : "-"; } }