1 use std::sync::atomic::AtomicUsize;
2 use std::sync::atomic::Ordering;
3 
4 /// Cached size field used in generated code.
5 /// It is always equal to itself to simplify generated code.
6 /// (Generated code can use `#[derive(Eq)]`).
7 #[derive(Debug, Default)]
8 pub struct CachedSize {
9     size: AtomicUsize,
10 }
11 
12 impl CachedSize {
13     /// Get cached size
get(&self) -> u3214     pub fn get(&self) -> u32 {
15         self.size.load(Ordering::Relaxed) as u32
16     }
17 
18     /// Set cached size
set(&self, size: u32)19     pub fn set(&self, size: u32) {
20         self.size.store(size as usize, Ordering::Relaxed)
21     }
22 }
23 
24 impl Clone for CachedSize {
clone(&self) -> CachedSize25     fn clone(&self) -> CachedSize {
26         CachedSize {
27             size: AtomicUsize::new(self.size.load(Ordering::Relaxed)),
28         }
29     }
30 }
31 
32 impl PartialEq<CachedSize> for CachedSize {
eq(&self, _other: &CachedSize) -> bool33     fn eq(&self, _other: &CachedSize) -> bool {
34         true
35     }
36 }
37 
38 impl Eq for CachedSize {}
39