#[no_mangle]
pub unsafe fn allocate(elem_count: usize, elem_ty: usize) -> usize {
if elem_count == 0 {
return 0;
}
let allocated_mem = allocate_impl(elem_count, elem_ty);
crate::debug_log!(format!(
"sdk.allocate: {} {} -> {}\n",
elem_count, elem_ty, allocated_mem
));
allocated_mem
}
fn allocate_impl(elem_count: usize, elem_ty: usize) -> usize {
match elem_ty {
0 => allocate_vec::<u8>(elem_count), 1 => allocate_vec::<u8>(elem_count),
2 => allocate_vec::<u16>(elem_count),
3 => allocate_vec::<u32>(elem_count),
4 => allocate_vec::<u64>(elem_count),
5 => allocate_vec::<i8>(elem_count),
6 => allocate_vec::<i16>(elem_count),
7 => allocate_vec::<i32>(elem_count),
8 => allocate_vec::<i64>(elem_count),
9 => allocate_vec::<f32>(elem_count),
10 => allocate_vec::<f64>(elem_count),
_ => 0,
}
}
fn allocate_vec<T>(count: usize) -> usize {
let vec = Vec::<T>::with_capacity(count);
let offset = vec.as_ptr() as usize;
std::mem::forget(vec);
offset
}