pub trait MapObserver:
HasLen
+ Named
+ Serialize
+ DeserializeOwned
+ AsRef<Self>
+ AsMut<Self> {
type Entry: PartialEq + Copy;
// Required methods
fn get(&self, idx: usize) -> Self::Entry;
fn set(&mut self, idx: usize, val: Self::Entry);
fn usable_count(&self) -> usize;
fn count_bytes(&self) -> u64;
fn initial(&self) -> Self::Entry;
fn reset_map(&mut self) -> Result<(), Error>;
fn to_vec(&self) -> Vec<Self::Entry>;
fn how_many_set(&self, indexes: &[usize]) -> usize;
}
Expand description
A MapObserver
observes the static map, as oftentimes used for AFL-like coverage information
When referring to this type in a constraint (e.g. O: MapObserver
), ensure that you only refer
to instances of a second type, e.g. C: AsRef<O>
or A: AsMut<O>
. Map observer instances are
passed around in a way that may be potentially wrapped by e.g. ExplicitTracking
as a way to
encode metadata into the type. This is an unfortunate additional requirement that we can’t get
around without specialization.
See crate::require_index_tracking
for an example of how to do so.
TODO: enforce iter() -> AssociatedTypeIter
when generic associated types stabilize
Required Associated Types§
Required Methods§
Sourcefn usable_count(&self) -> usize
fn usable_count(&self) -> usize
Get the number of usable entries in the map (all by default)
Sourcefn count_bytes(&self) -> u64
fn count_bytes(&self) -> u64
Count the set bytes in the map
Sourcefn how_many_set(&self, indexes: &[usize]) -> usize
fn how_many_set(&self, indexes: &[usize]) -> usize
Get the number of set entries with the specified indexes
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.