// Copyright 2021 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.

#ifndef SRC_UI_SCENIC_LIB_ALLOCATION_ID_H_
#define SRC_UI_SCENIC_LIB_ALLOCATION_ID_H_

#include <fuchsia/hardware/display/cpp/fidl.h>
#include <fuchsia/hardware/display/types/cpp/fidl.h>
#include <zircon/types.h>

#include <cstdint>

namespace allocation {

using GlobalBufferCollectionId = zx_koid_t;
using GlobalImageId = uint64_t;

// Used to indicate an invalid buffer collection or image.
extern const GlobalBufferCollectionId kInvalidId;
extern const GlobalImageId kInvalidImageId;

// Atomically produces a new id that can be used to reference a buffer collection.
GlobalBufferCollectionId GenerateUniqueBufferCollectionId();

// Atomically produce a new id that can be used to reference a buffer collection's image.
GlobalImageId GenerateUniqueImageId();

constexpr inline fuchsia::hardware::display::BufferCollectionId ToDisplayBufferCollectionId(
    GlobalBufferCollectionId global_buffer_collection_id) {
  return {.value = global_buffer_collection_id};
}

constexpr inline fuchsia::hardware::display::ImageId ToFidlImageId(GlobalImageId global_image_id) {
  return {.value = global_image_id};
}

}  // namespace allocation

#endif  // SRC_UI_SCENIC_LIB_ALLOCATION_ID_H_
