diff options
Diffstat (limited to 'src/emscripten_api.rs')
-rw-r--r-- | src/emscripten_api.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/emscripten_api.rs b/src/emscripten_api.rs index e296818..c7f980f 100644 --- a/src/emscripten_api.rs +++ b/src/emscripten_api.rs @@ -3,11 +3,37 @@ use signal::Signal; use pitch::Pitch; use std::os::raw::c_char; +use std::os::raw::c_void; +use std::mem; use std::ffi::CString; use std::slice; use std::f32; #[no_mangle] +pub extern "C" fn malloc(size: usize) -> *mut c_void { + let mut buf = Vec::with_capacity(size); + let ptr = buf.as_mut_ptr(); + mem::forget(buf); + return ptr as *mut c_void; +} + +#[no_mangle] +pub extern "C" fn free(ptr: *mut c_void, cap: usize) { + unsafe { + // after it's in scope, it can go out of scope in the normal + // RAII cleanup. + let _buf = Vec::from_raw_parts(ptr, 0, cap); + } +} + +#[no_mangle] +pub extern "C" fn free_str(ptr: *mut c_char) { + unsafe { + let _ = CString::from_raw(ptr); + } +} + +#[no_mangle] pub extern "C" fn find_fundamental_frequency(signal_ptr: *const f32, signal_length: isize, sample_rate: f32) -> f32 { let signal_slice = unsafe { &slice::from_raw_parts(signal_ptr, signal_length as usize) |