sclass Best { A best; double score; transient O onChange; bool isNewBest(double score) { ret best == null || !isNaN(score) && score > this.score; } double bestScore() { ret best == null ? Double.NaN : score; } double score() { ret bestScore(); } double getScore() { ret bestScore(); } bool put(A a, double score) { if (a != null && isNewBest(score)) { best = a; this.score = score; pcallF(onChange); ret true; } ret false; } A get() { ret best; } bool has() { ret best != null; } Pair pair() { ret main.pair(best, bestScore()); } A getIfScoreAbove(double x) { ret score() >= x ? best : null; } }