derive_relaxedcounter/
derive-relaxedcounter.rs1use type_census::{Instance, Tabulate};
3
4#[derive(Clone, Tabulate)]
7pub struct Foo<T> {
8 v: T,
9 _instance: Instance<Self>,
11}
12
13impl<T> Foo<T> {
14 pub fn new(v: T) -> Self
15 where
16 Self: Tabulate,
18 {
19 Self {
20 v,
21 _instance: Instance::new(),
23 }
24 }
25
26 pub fn v(self) -> T {
27 self.v
28 }
29}
30
31fn main() {
32 assert_eq!(Foo::<i8>::instances(), 0);
34 assert_eq!(Foo::<u8>::instances(), 0);
35
36 let mut bar: Vec<Foo<i8>> = vec![Foo::new(0i8); 10];
38
39 assert_eq!(Foo::<i8>::instances(), 10);
40 assert_eq!(Foo::<u8>::instances(), 10);
41
42 let _baz: Vec<Foo<u8>> = vec![Foo::new(0u8); 5];
43
44 assert_eq!(Foo::<i8>::instances(), 15);
45 assert_eq!(Foo::<u8>::instances(), 15);
46
47 let _ = bar.drain(0..5);
48
49 assert_eq!(Foo::<i8>::instances(), 10);
50 assert_eq!(Foo::<u8>::instances(), 10);
51}