i have this function here, which basically tries to zip two Float32Arrays
fn interleave(left_buffer: &Float32Array, right_buffer: &Float32Array) -> Float32Array {
if right_buffer.length() == 0 {
// @TODO how to return original array instead of a clone
return left_buffer.clone();
}
let left_size = left_buffer.length();
let right_size = right_buffer.length();
let combined_length = left_size + right_size;
let interleaved_buffer = Float32Array::new_with_length(combined_length);
let mut ctr = 0;
let mut next_index = 0;
while next_index < combined_length {
let left_float = left_buffer.get_index(ctr);
let right_float = right_buffer.get_index(ctr);
if ctr < left_size {
interleaved_buffer.set_index(next_index, left_float);
next_index += 1
}
if ctr < right_size {
interleaved_buffer.set_index(next_index, right_float);
next_index += 1
}
ctr += 1
}
interleaved_buffer
}
my question is:
- is there a way to return the original left_buffer without cloning it? if I remove the clone, the compiler says that it expects a Float32Array, instead of &Float32Array
- is there a better way to zip values?
Thanks for your time, i'm really new to Rust