// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_WEBNN_COREML_UTILS_COREML_H_
#define SERVICES_WEBNN_COREML_UTILS_COREML_H_

#include <CoreML/CoreML.h>

#include "base/component_export.h"
#include "base/containers/span.h"
#include "base/functional/callback_forward.h"
#include "mojo/public/cpp/base/big_buffer.h"

namespace webnn::coreml {

// Reads from `multi_array` into a newly-allocated `BigBuffer` containing the
// read bytes.
//
// The caller must ensure that `multi_array` remains alive until
// `result_callback` is run.
void COMPONENT_EXPORT(WEBNN_SERVICE) ReadFromMLMultiArray(
    MLMultiArray* multi_array,
    base::OnceCallback<void(mojo_base::BigBuffer)> result_callback);

// Writes `bytes_to_write` into `multi_array`, overwriting any data
// that was previously there. The length of `bytes_to_write` must exactly
// match the number of bytes of data represented by `multi_array`.
//
// The caller must ensure that `multi_array` and the bytes backed by
// `bytes_to_write` remain alive until `done_closure` is run.
void COMPONENT_EXPORT(WEBNN_SERVICE)
    WriteToMLMultiArray(MLMultiArray* multi_array,
                        base::span<const uint8_t> bytes_to_write,
                        base::OnceClosure done_closure);

}  // namespace webnn::coreml

#endif  // SERVICES_WEBNN_COREML_UTILS_COREML_H_
