// Copyright 2019 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 "fvm-host/format.h"

bool FvmReservation::Approved() const {
    if (data_.request && (*data_.request > data_.reserved)) {
        return false;
    }

    if (nodes_.request && (*nodes_.request > nodes_.reserved)) {
        return false;
    }

    if (total_bytes_.request &&
        ((*total_bytes_.request != 0) && (*total_bytes_.request < total_bytes_.reserved))) {
        return false;
    }
    return true;
}

void FvmReservation::Dump(FILE* stream) const {
    fprintf(stream,
            "Requested: inodes: %" PRIu64 " data: %" PRIu64 " total bytes: %" PRIu64 "\n"
            "Reserved:  inodes: %" PRIu64 " data: %" PRIu64 " total bytes: %" PRIu64 "\n",
            nodes_.request.value_or(0), data_.request.value_or(0), total_bytes_.request.value_or(0),
            nodes_.reserved, data_.reserved, total_bytes_.reserved);
}
