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