tonlib_core/cell/
level_mask.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
2pub struct LevelMask {
3 mask: u32,
4}
5
6impl LevelMask {
7 pub fn new(new_mask: u32) -> Self {
8 Self { mask: new_mask }
9 }
10
11 pub fn mask(&self) -> u32 {
12 self.mask
13 }
14
15 pub fn level(&self) -> u8 {
16 32 - self.mask.leading_zeros() as u8
17 }
18
19 pub fn hash_index(&self) -> usize {
20 self.mask.count_ones() as usize
21 }
22
23 pub fn hash_count(&self) -> usize {
24 self.hash_index() + 1
25 }
26
27 pub fn apply(&self, level: u8) -> Self {
28 LevelMask {
29 mask: self.mask & ((1u32 << level) - 1),
30 }
31 }
32
33 pub fn apply_or(&self, other: Self) -> Self {
34 LevelMask {
35 mask: self.mask | other.mask,
36 }
37 }
38
39 pub fn shift_right(&self) -> Self {
40 LevelMask {
41 mask: self.mask >> 1,
42 }
43 }
44
45 pub fn is_significant(&self, level: u8) -> bool {
46 level == 0 || !(self.mask >> (level - 1)).is_multiple_of(2)
47 }
48}