This commit is contained in:
Andrea Fioraldi 2020-12-10 10:07:09 +01:00
parent 67f6aecb6b
commit 892fb2ed76
2 changed files with 14 additions and 28 deletions

View File

@ -6,7 +6,7 @@ use core::slice::from_raw_parts_mut;
use num::Integer; use num::Integer;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::serde_anymap::{SerdeAny, ArrayMut}; use crate::serde_anymap::{ArrayMut, SerdeAny};
use crate::AflError; use crate::AflError;
// TODO register each observer in the Registry in new() // TODO register each observer in the Registry in new()
@ -29,8 +29,6 @@ pub trait Observer: SerdeAny + 'static {
crate::create_serde_registry_for_trait!(observer_serde, crate::observers::Observer); crate::create_serde_registry_for_trait!(observer_serde, crate::observers::Observer);
/// A MapObserver observes the static map, as oftentimes used for afl-like coverage information /// A MapObserver observes the static map, as oftentimes used for afl-like coverage information
pub trait MapObserver<T> pub trait MapObserver<T>
where where
@ -68,7 +66,7 @@ where
#[derive(Serialize)] #[derive(Serialize)]
pub struct StdMapObserver<T> pub struct StdMapObserver<T>
where where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned, T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{ {
map: ArrayMut<T>, map: ArrayMut<T>,
initial: T, initial: T,
@ -77,7 +75,7 @@ where
impl<T> Observer for StdMapObserver<T> impl<T> Observer for StdMapObserver<T>
where where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned, T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{ {
fn reset(&mut self) -> Result<(), AflError> { fn reset(&mut self) -> Result<(), AflError> {
self.reset_map() self.reset_map()
@ -90,7 +88,7 @@ T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned,
impl<T> SerdeAny for StdMapObserver<T> impl<T> SerdeAny for StdMapObserver<T>
where where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned, T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{ {
fn as_any(&self) -> &dyn Any { fn as_any(&self) -> &dyn Any {
self self
@ -102,7 +100,7 @@ where
impl<T> MapObserver<T> for StdMapObserver<T> impl<T> MapObserver<T> for StdMapObserver<T>
where where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned, T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{ {
fn map(&self) -> &[T] { fn map(&self) -> &[T] {
self.map.as_slice() self.map.as_slice()
@ -127,7 +125,7 @@ T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned,
impl<'de, T> Deserialize<'de> for StdMapObserver<T> impl<'de, T> Deserialize<'de> for StdMapObserver<T>
where where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned, T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{ {
fn deserialize<D>(de: D) -> Result<Self, D::Error> fn deserialize<D>(de: D) -> Result<Self, D::Error>
where where
@ -140,7 +138,7 @@ where
impl<T> StdMapObserver<T> impl<T> StdMapObserver<T>
where where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned, T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{ {
/// Creates a new MapObserver /// Creates a new MapObserver
pub fn new(name: &'static str, map: &'static mut [T]) -> Self { pub fn new(name: &'static str, map: &'static mut [T]) -> Self {

View File

@ -539,12 +539,8 @@ where
impl<T: Sized + serde::Serialize> Array<T> { impl<T: Sized + serde::Serialize> Array<T> {
pub fn as_slice(&self) -> &[T] { pub fn as_slice(&self) -> &[T] {
match self { match self {
Array::Cptr(p) => { Array::Cptr(p) => unsafe { core::slice::from_raw_parts(p.0, p.1) },
unsafe { core::slice::from_raw_parts(p.0, p.1) } Array::Owned(v) => v.as_slice(),
},
Array::Owned(v) => {
v.as_slice()
}
} }
} }
} }
@ -578,23 +574,15 @@ where
impl<T: Sized + serde::Serialize> ArrayMut<T> { impl<T: Sized + serde::Serialize> ArrayMut<T> {
pub fn as_slice(&self) -> &[T] { pub fn as_slice(&self) -> &[T] {
match self { match self {
ArrayMut::Cptr(p) => { ArrayMut::Cptr(p) => unsafe { core::slice::from_raw_parts(p.0, p.1) },
unsafe { core::slice::from_raw_parts(p.0, p.1) } ArrayMut::Owned(v) => v.as_slice(),
},
ArrayMut::Owned(v) => {
v.as_slice()
}
} }
} }
pub fn as_mut_slice(&mut self) -> &mut [T] { pub fn as_mut_slice(&mut self) -> &mut [T] {
match self { match self {
ArrayMut::Cptr(p) => { ArrayMut::Cptr(p) => unsafe { core::slice::from_raw_parts_mut(p.0, p.1) },
unsafe { core::slice::from_raw_parts_mut(p.0, p.1) } ArrayMut::Owned(v) => v.as_mut_slice(),
},
ArrayMut::Owned(v) => {
v.as_mut_slice()
}
} }
} }
} }