protobuf/
cached_size.rs

1use std::sync::atomic::AtomicUsize;
2use 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)]
8pub struct CachedSize {
9    size: AtomicUsize,
10}
11
12impl CachedSize {
13    /// Get cached size
14    pub fn get(&self) -> u32 {
15        self.size.load(Ordering::Relaxed) as u32
16    }
17
18    /// Set cached size
19    pub fn set(&self, size: u32) {
20        self.size.store(size as usize, Ordering::Relaxed)
21    }
22}
23
24impl Clone for CachedSize {
25    fn clone(&self) -> CachedSize {
26        CachedSize {
27            size: AtomicUsize::new(self.size.load(Ordering::Relaxed)),
28        }
29    }
30}
31
32impl PartialEq<CachedSize> for CachedSize {
33    fn eq(&self, _other: &CachedSize) -> bool {
34        true
35    }
36}
37
38impl Eq for CachedSize {}