use std::iter::Sum;
use std::ops::Add;
use std::ops::AddAssign;
use allocative::Allocative;
use dupe::Dupe;
#[derive(Default, Copy, Clone, Dupe, Debug, Allocative)]
pub(crate) struct AllocCounts {
pub(crate) bytes: usize,
pub(crate) count: usize,
}
impl AllocCounts {
#[cfg(test)]
pub(crate) fn normalize_for_golden_tests(&mut self) {
self.bytes = self.count * 8;
}
}
impl AddAssign for AllocCounts {
fn add_assign(&mut self, other: AllocCounts) {
self.bytes += other.bytes;
self.count += other.count;
}
}
impl Add for AllocCounts {
type Output = AllocCounts;
fn add(self, other: AllocCounts) -> AllocCounts {
AllocCounts {
bytes: self.bytes + other.bytes,
count: self.count + other.count,
}
}
}
impl<'a> Sum<&'a AllocCounts> for AllocCounts {
fn sum<I>(iter: I) -> AllocCounts
where
I: Iterator<Item = &'a AllocCounts>,
{
iter.fold(AllocCounts::default(), |acc, x| acc + *x)
}
}