solve reducer generic using phantom data
This commit is contained in:
parent
9c30a42667
commit
889ee1e99c
@ -5,6 +5,7 @@ use crate::executors::Executor;
|
|||||||
use crate::observers::MapObserver;
|
use crate::observers::MapObserver;
|
||||||
|
|
||||||
use num::Integer;
|
use num::Integer;
|
||||||
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
pub trait Feedback {
|
pub trait Feedback {
|
||||||
/// is_interesting should return the "Interestingness" from 0 to 255 (percent times 2.55)
|
/// is_interesting should return the "Interestingness" from 0 to 255 (percent times 2.55)
|
||||||
@ -27,12 +28,13 @@ pub trait MinReducer<T: Integer + Copy + 'static> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct MapFeedback<MapT: Integer + Copy + 'static> {
|
pub struct MapFeedback<MapT: Integer + Copy + 'static, ReducerT: Reducer<MapT>> {
|
||||||
virgin_map: Vec<MapT>,
|
virgin_map: Vec<MapT>,
|
||||||
|
_phantom: PhantomData<ReducerT>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, MapT: Integer + Copy + 'static, ReducerT: Reducer<MapT>> Feedback for MapFeedback<MapT> {
|
impl<'a, MapT: Integer + Copy + 'static, ReducerT: Reducer<MapT>> Feedback for MapFeedback<MapT, ReducerT> {
|
||||||
fn is_interesting(&mut self, executor: &dyn Executor, entry: &dyn Testcase) -> u8 {
|
fn is_interesting(&mut self, executor: &dyn Executor, _entry: &dyn Testcase) -> u8 {
|
||||||
let mut interesting = 0;
|
let mut interesting = 0;
|
||||||
for observer in executor.get_observers() {
|
for observer in executor.get_observers() {
|
||||||
if let Some(o) = observer.as_any().downcast_ref::<MapObserver<MapT>>() {
|
if let Some(o) = observer.as_any().downcast_ref::<MapObserver<MapT>>() {
|
||||||
@ -53,11 +55,12 @@ impl<'a, MapT: Integer + Copy + 'static, ReducerT: Reducer<MapT>> Feedback for M
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, MapT: Integer + Copy + 'static> MapFeedback<MapT> {
|
impl<'a, MapT: Integer + Copy + 'static, ReducerT: Reducer<MapT>> MapFeedback<MapT, ReducerT> {
|
||||||
/// Create new MapFeedback using a static map observer
|
/// Create new MapFeedback using a static map observer
|
||||||
pub fn new(map_size: usize) -> Self {
|
pub fn new(map_size: usize) -> Self {
|
||||||
MapFeedback {
|
MapFeedback {
|
||||||
virgin_map: vec![MapT::zero(); map_size],
|
virgin_map: vec![MapT::zero(); map_size],
|
||||||
|
_phantom: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user