use crate::correlator_context::ffi::mwalib_correlator_context_new;
use crate::metafits_context::ffi::mwalib_metafits_context_new;
use crate::voltage_context::test::get_test_voltage_context;
use crate::{CorrelatorContext, MWAVersion, MetafitsContext, VoltageContext};
use libc::size_t;
use std::ffi::{c_char, CString};
pub(crate) fn get_test_ffi_metafits_context(mwa_version: MWAVersion) -> *mut MetafitsContext {
get_test_ffi_metafits_context_ext(
mwa_version,
String::from("test_files/1101503312_1_timestep/1101503312.metafits"),
)
}
pub(crate) fn get_test_ffi_metafits_context_ext(
mwa_version: MWAVersion,
metafits_filename: String,
) -> *mut MetafitsContext {
let error_len: size_t = 128;
let error_message = CString::new(" ".repeat(error_len)).unwrap();
let error_message_ptr = error_message.as_ptr() as *mut c_char;
let metafits_file = CString::new(metafits_filename).unwrap();
let metafits_file_ptr = metafits_file.as_ptr();
unsafe {
let mut metafits_context_ptr: *mut MetafitsContext = std::ptr::null_mut();
let retval = mwalib_metafits_context_new(
metafits_file_ptr,
mwa_version,
&mut metafits_context_ptr,
error_message_ptr,
error_len,
);
assert_eq!(retval, 0, "mwalib_metafits_context_new_ext failure");
let context_ptr = metafits_context_ptr.as_mut();
assert!(context_ptr.is_some());
context_ptr.unwrap()
}
}
pub(crate) fn get_test_ffi_correlator_context_legacy() -> *mut CorrelatorContext {
let error_len: size_t = 128;
let error_message = CString::new(" ".repeat(error_len)).unwrap();
let error_message_ptr = error_message.as_ptr() as *mut c_char;
let metafits_file =
CString::new("test_files/1101503312_1_timestep/1101503312.metafits").unwrap();
let metafits_file_ptr = metafits_file.as_ptr();
let gpubox_file =
CString::new("test_files/1101503312_1_timestep/1101503312_20141201210818_gpubox01_00.fits")
.unwrap();
let gpubox_files: Vec<*const c_char> = vec![gpubox_file.as_ptr()];
let gpubox_files_ptr = gpubox_files.as_ptr() as *mut *const c_char;
unsafe {
let mut correlator_context_ptr: *mut CorrelatorContext = std::ptr::null_mut();
let retval = mwalib_correlator_context_new(
metafits_file_ptr,
gpubox_files_ptr,
1,
&mut correlator_context_ptr,
error_message_ptr,
error_len,
);
assert_eq!(retval, 0, "mwalib_correlator_context_new failure");
let context_ptr = correlator_context_ptr.as_mut();
assert!(context_ptr.is_some());
context_ptr.unwrap()
}
}
pub(crate) fn get_test_ffi_correlator_context_mwax() -> *mut CorrelatorContext {
let error_len: size_t = 128;
let error_message = CString::new(" ".repeat(error_len)).unwrap();
let error_message_ptr = error_message.as_ptr() as *mut c_char;
let metafits_file =
CString::new("test_files/1244973688_1_timestep/1244973688.metafits").unwrap();
let metafits_file_ptr = metafits_file.as_ptr();
let gpubox_file =
CString::new("test_files/1244973688_1_timestep/1244973688_20190619100110_ch114_000.fits")
.unwrap();
let gpubox_files: Vec<*const c_char> = vec![gpubox_file.as_ptr()];
let gpubox_files_ptr = gpubox_files.as_ptr() as *mut *const c_char;
unsafe {
let mut correlator_context_ptr: *mut CorrelatorContext = std::ptr::null_mut();
let retval = mwalib_correlator_context_new(
metafits_file_ptr,
gpubox_files_ptr,
1,
&mut correlator_context_ptr,
error_message_ptr,
error_len,
);
assert_eq!(retval, 0, "mwalib_correlator_context_new failure");
let context_ptr = correlator_context_ptr.as_mut();
assert!(context_ptr.is_some());
context_ptr.unwrap()
}
}
pub(crate) fn get_test_ffi_voltage_context(
mwa_version: MWAVersion,
oversampled: bool,
) -> *mut VoltageContext {
let context = get_test_voltage_context(mwa_version, oversampled);
Box::into_raw(Box::new(context))
}
pub(crate) fn ffi_boxed_slice_to_array<T>(ptr: *mut T, len: usize) -> Vec<T> {
unsafe {
let vec: Vec<T> = Vec::from_raw_parts(ptr, len, len);
vec
}
}