use super::Residue;
use crate::analysis::cpa::state::AbstractState;
#[derive(Default)]
pub struct VecReducer;
impl<'a, S> Residue<'a, S> for VecReducer
where
S: AbstractState,
{
type Output = Vec<S>;
fn new_state(
&mut self,
_source_idx: usize,
_dest_idx: usize,
_op: &Option<crate::analysis::pcode_store::PcodeOpRef<'a>>,
) {
}
fn merged_state(
&mut self,
_source_idx: usize,
_merged_idx: usize,
_op: &Option<crate::analysis::pcode_store::PcodeOpRef<'a>>,
) {
}
fn new() -> Self {
Self
}
fn finalize(self, reached: Vec<S>) -> Self::Output {
reached
}
}
#[derive(Clone, Copy, Debug)]
pub struct VecReducerFactory;
impl VecReducerFactory {
pub const fn new() -> Self {
VecReducerFactory
}
}
impl Default for VecReducerFactory {
fn default() -> Self {
VecReducerFactory::new()
}
}
pub const VEC: VecReducerFactory = VecReducerFactory;
impl<A> super::ReducerFactoryForState<A> for VecReducerFactory
where
A: crate::analysis::cpa::ConfigurableProgramAnalysis,
A::State: AbstractState,
{
type Reducer<'op> = VecReducer;
fn make<'op>(&self) -> Self::Reducer<'op> {
VecReducer
}
}