mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-08 13:48:26 +00:00
feat(c-api) Implement From<&[T]> for wasm_$name_vec_t for boxed vec.
This commit is contained in:
@@ -42,7 +42,7 @@ int main() {
|
||||
macro_rules! wasm_declare_vec {
|
||||
($name:ident) => {
|
||||
paste::paste! {
|
||||
#[doc = "Represents of a vector of `wasm_" $name "_t`.
|
||||
#[doc = "Represents a vector of `wasm_" $name "_t`.
|
||||
|
||||
Read the documentation of [`wasm_" $name "_t`] to see more concrete examples.
|
||||
|
||||
@@ -107,6 +107,7 @@ int main() {
|
||||
.into_boxed_slice();
|
||||
let data = copied_data.as_mut_ptr();
|
||||
::std::mem::forget(copied_data);
|
||||
|
||||
Self {
|
||||
size,
|
||||
data,
|
||||
@@ -183,7 +184,9 @@ int main() {
|
||||
macro_rules! wasm_declare_boxed_vec {
|
||||
($name:ident) => {
|
||||
paste::paste! {
|
||||
#[doc = "Represents of a vector of [`wasm_" $name "_t`]."]
|
||||
#[doc = "Represents a vector of `wasm_" $name "_t`.
|
||||
|
||||
Read the documentation of [`wasm_" $name "_t`] to see more concrete examples."]
|
||||
#[derive(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct [<wasm_ $name _vec_t>] {
|
||||
@@ -206,6 +209,27 @@ macro_rules! wasm_declare_boxed_vec {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T: Into<[<wasm_ $name _t>]> + Clone> From<&'a [T]> for [<wasm_ $name _vec_t>] {
|
||||
fn from(other: &'a [T]) -> Self {
|
||||
let size = other.len();
|
||||
let mut copied_data = other
|
||||
.iter()
|
||||
.cloned()
|
||||
.map(Into::into)
|
||||
.map(Box::new)
|
||||
.map(Box::into_raw)
|
||||
.collect::<Vec<*mut [<wasm_ $name _t>]>>()
|
||||
.into_boxed_slice();
|
||||
let data = copied_data.as_mut_ptr();
|
||||
::std::mem::forget(copied_data);
|
||||
|
||||
Self {
|
||||
size,
|
||||
data,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: do this properly
|
||||
impl [<wasm_ $name _vec_t>] {
|
||||
pub unsafe fn into_slice(&self) -> Option<&[Box<[<wasm_ $name _t>]>]>{
|
||||
|
||||
Reference in New Issue
Block a user