// Copyright 2020 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 ZIRCON_SYSTEM_ULIB_MINFS_UNOWNED_VMO_BUFFER_H_
#define ZIRCON_SYSTEM_ULIB_MINFS_UNOWNED_VMO_BUFFER_H_

#ifdef __Fuchsia__

#include <lib/zx/vmo.h>

#include <storage/buffer/block_buffer.h>

namespace minfs {

// Trivial BlockBuffer that doesn't own the underlying buffer.
// TODO(47947): Remove this.
class UnownedVmoBuffer : public storage::BlockBuffer {
 public:
  UnownedVmoBuffer(const zx::unowned_vmo& vmo) : vmo_(vmo) {}
  ~UnownedVmoBuffer() {}

  // BlockBuffer interface:
  size_t capacity() const final { return 0; }
  uint32_t BlockSize() const final { return 0; }
  vmoid_t vmoid() const final { return 0; }
  zx_handle_t Vmo() const final { return vmo_->get(); }
  void* Data(size_t index) final { return nullptr; }
  const void* Data(size_t index) const final { return nullptr; }

 private:
  zx::unowned_vmo vmo_;
};

}  // namespace minfs

#endif  // __Fuchsia__

#endif  // ZIRCON_SYSTEM_ULIB_MINFS_UNOWNED_VMO_BUFFER_H_
