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 serde::{Deserialize, Serialize};
use crate::serde_anymap::{SerdeAny, ArrayMut};
use crate::serde_anymap::{ArrayMut, SerdeAny};
use crate::AflError;
// 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);
/// A MapObserver observes the static map, as oftentimes used for afl-like coverage information
pub trait MapObserver<T>
where
@ -68,7 +66,7 @@ where
#[derive(Serialize)]
pub struct StdMapObserver<T>
where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned,
T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{
map: ArrayMut<T>,
initial: T,
@ -77,7 +75,7 @@ where
impl<T> Observer for StdMapObserver<T>
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> {
self.reset_map()
@ -90,7 +88,7 @@ T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned,
impl<T> SerdeAny for StdMapObserver<T>
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 {
self
@ -102,7 +100,7 @@ where
impl<T> MapObserver<T> for StdMapObserver<T>
where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned,
T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{
fn map(&self) -> &[T] {
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>
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>
where
@ -140,7 +138,7 @@ where
impl<T> StdMapObserver<T>
where
T: Default + Copy+ 'static + serde::Serialize + serde::de::DeserializeOwned,
T: Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned,
{
/// Creates a new MapObserver
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> {
pub fn as_slice(&self) -> &[T] {
match self {
Array::Cptr(p) => {
unsafe { core::slice::from_raw_parts(p.0, p.1) }
},
Array::Owned(v) => {
v.as_slice()
}
Array::Cptr(p) => unsafe { core::slice::from_raw_parts(p.0, p.1) },
Array::Owned(v) => v.as_slice(),
}
}
}
@ -578,23 +574,15 @@ where
impl<T: Sized + serde::Serialize> ArrayMut<T> {
pub fn as_slice(&self) -> &[T] {
match self {
ArrayMut::Cptr(p) => {
unsafe { core::slice::from_raw_parts(p.0, p.1) }
},
ArrayMut::Owned(v) => {
v.as_slice()
}
ArrayMut::Cptr(p) => unsafe { core::slice::from_raw_parts(p.0, p.1) },
ArrayMut::Owned(v) => v.as_slice(),
}
}
pub fn as_mut_slice(&mut self) -> &mut [T] {
match self {
ArrayMut::Cptr(p) => {
unsafe { core::slice::from_raw_parts_mut(p.0, p.1) }
},
ArrayMut::Owned(v) => {
v.as_mut_slice()
}
ArrayMut::Cptr(p) => unsafe { core::slice::from_raw_parts_mut(p.0, p.1) },
ArrayMut::Owned(v) => v.as_mut_slice(),
}
}
}
}