mlx-sys 0.0.8

Low-level interface and binding generation for the mlx library
/* Copyright © 2023-2024 Apple Inc. */

#include <cstring>

#include "mlx/c/device.h"
#include "mlx/c/private/device.h"
#include "mlx/c/private/stream.h"
#include "mlx/c/private/string.h"
#include "mlx/c/private/utils.h"
#include "mlx/c/stream.h"

mlx_string_* mlx_stream_::tostring() {
  MLX_TRY_CATCH(std::ostringstream os; os << ctx; std::string str = os.str();
                return new mlx_string_(str), return nullptr);
}

extern "C" mlx_stream mlx_stream_new(int index, mlx_device dev) {
  RETURN_MLX_C_STREAM(mlx::core::Stream(index, dev->ctx));
}
extern "C" mlx_stream mlx_stream_new_on_device(mlx_device dev) {
  RETURN_MLX_C_STREAM(new_stream(dev->ctx));
}
extern "C" bool mlx_stream_equal(mlx_stream lhs, mlx_stream rhs) {
  return lhs->ctx == rhs->ctx;
}
extern "C" mlx_device mlx_stream_get_device(mlx_stream stream) {
  RETURN_MLX_C_DEVICE(stream->ctx.device);
}
extern "C" void mlx_synchronize(mlx_stream stream) {
  MLX_TRY_CATCH(mlx::core::synchronize(stream->ctx), );
}
extern "C" mlx_stream mlx_default_stream(mlx_device dev) {
  RETURN_MLX_C_STREAM(default_stream(dev->ctx));
}
extern "C" mlx_stream mlx_set_default_stream(mlx_stream stream) {
  MLX_TRY_CATCH(set_default_stream(stream->ctx); return stream;
                , return nullptr);
}
extern "C" mlx_stream mlx_cpu_stream() {
  RETURN_MLX_C_STREAM(default_stream(mlx::core::Device::DeviceType::cpu));
}
extern "C" mlx_stream mlx_gpu_stream() {
  RETURN_MLX_C_STREAM(default_stream(mlx::core::Device::DeviceType::gpu));
}