use crate::call;
use crate::common::PrecisionType;
use crate::config::SetConfig;
use crate::ctypes::{PD_Config, PD_ConfigEnableLiteEngine};
use crate::utils::to_c_str;
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, Clone)]
pub struct LiteEngine {
pub precision: PrecisionType,
pub zero_copy: bool,
pub passes_filter: Vec<String>,
pub ops_filter: Vec<String>,
}
impl SetConfig for LiteEngine {
fn set_to(self, config: *mut PD_Config) {
let LiteEngine {
precision,
zero_copy,
passes_filter,
ops_filter,
} = self;
let (_p, mut passes_filter_ptr) = passes_filter
.iter()
.map(|s| to_c_str(s))
.unzip::<_, _, Vec<_>, Vec<_>>();
let passes_filter_num = passes_filter_ptr.len();
let (_o, mut ops_filter_ptr) = ops_filter
.iter()
.map(|s| to_c_str(s))
.unzip::<_, _, Vec<_>, Vec<_>>();
let ops_filter_num = ops_filter_ptr.len();
call! {
PD_ConfigEnableLiteEngine(
config,
precision,
zero_copy,
passes_filter_num,
passes_filter_ptr.as_mut_ptr(),
ops_filter_num,
ops_filter_ptr.as_mut_ptr()
)
};
}
}