use type_census::{Instance, Tabulate};
#[derive(Clone, Tabulate)]
#[Tabulate(Counter = "type_census::counter::DistributedCounter<32>")]
pub struct Foo<T> {
v: T,
_instance: Instance<Self>,
}
impl<T> Foo<T> {
pub fn new(v: T) -> Self
where
Self: Tabulate,
{
Self {
v,
_instance: Instance::new(),
}
}
pub fn v(self) -> T {
self.v
}
}
fn main() {
assert_eq!(Foo::<i8>::instances(), 0);
assert_eq!(Foo::<u8>::instances(), 0);
let mut bar: Vec<Foo<i8>> = vec![Foo::new(0i8); 10];
assert_eq!(Foo::<i8>::instances(), 10);
assert_eq!(Foo::<u8>::instances(), 10);
let _baz: Vec<Foo<u8>> = vec![Foo::new(0u8); 5];
assert_eq!(Foo::<i8>::instances(), 15);
assert_eq!(Foo::<u8>::instances(), 15);
let _ = bar.drain(0..5);
assert_eq!(Foo::<i8>::instances(), 10);
assert_eq!(Foo::<u8>::instances(), 10);
}