use crate::{
coarse_channel::{self, ffi},
ffi::{ffi_create_c_array, ffi_free_c_array},
};
#[repr(C)]
pub struct CoarseChannel {
pub corr_chan_number: usize,
pub rec_chan_number: usize,
pub gpubox_number: usize,
pub chan_width_hz: u32,
pub chan_start_hz: u32,
pub chan_centre_hz: u32,
pub chan_end_hz: u32,
}
impl CoarseChannel {
pub fn populate_array(
coarse_chans: &[crate::coarse_channel::CoarseChannel],
) -> (*mut ffi::CoarseChannel, usize) {
let mut item_vec: Vec<ffi::CoarseChannel> = Vec::new();
for item in coarse_chans.iter() {
let out_item = {
let coarse_channel::CoarseChannel {
corr_chan_number,
rec_chan_number,
gpubox_number,
chan_width_hz,
chan_start_hz,
chan_centre_hz,
chan_end_hz,
} = item;
coarse_channel::ffi::CoarseChannel {
corr_chan_number: *corr_chan_number,
rec_chan_number: *rec_chan_number,
gpubox_number: *gpubox_number,
chan_width_hz: *chan_width_hz,
chan_start_hz: *chan_start_hz,
chan_centre_hz: *chan_centre_hz,
chan_end_hz: *chan_end_hz,
}
};
item_vec.push(out_item);
}
ffi_create_c_array(item_vec)
}
pub fn destroy_array(items_ptr: *mut ffi::CoarseChannel, items_len: usize) {
ffi_free_c_array(items_ptr, items_len);
}
}