+/* Update level's first watermark, and return overall first. */
+static const struct timer *first_for_level(struct timers *timers,
+ size_t level,
+ const struct timer *level_first,
+ const struct timer *first)
+{
+ if (level_first) {
+ timers->firsts[level] = level_first->time;
+ if (!first || level_first->time < first->time)
+ first = level_first;
+ } else {
+ timers->firsts[level] = -1ULL;
+ }
+ return first;
+}
+
+static bool level_may_beat(const struct timers *timers, size_t level,
+ const struct timer *first)
+{
+ return !first || timers->firsts[level] < first->time;
+}
+