// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <kernel/deadline.h>

#include <zircon/time.h>

const TimerSlack TimerSlack::none_{0, TIMER_SLACK_CENTER};

const Deadline Deadline::infinite_{ZX_TIME_INFINITE, TimerSlack::none()};

zx_time_t Deadline::earliest() const {
    switch (slack_.mode()) {
    case TIMER_SLACK_CENTER:
        return zx_time_sub_duration(when_, slack_.amount());
    case TIMER_SLACK_LATE:
        return when_;
    case TIMER_SLACK_EARLY:
        return zx_time_sub_duration(when_, slack_.amount());
    default:
        panic("invalid timer mode %u\n", slack_.mode());
    }
}

zx_time_t Deadline::latest() const {
    switch (slack_.mode()) {
    case TIMER_SLACK_CENTER:
        return zx_time_add_duration(when_, slack_.amount());
    case TIMER_SLACK_LATE:
        return zx_time_add_duration(when_, slack_.amount());
    case TIMER_SLACK_EARLY:
        return when_;
    default:
        panic("invalid timer mode %u\n", slack_.mode());
    }
}
