1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
pub struct LayoutChecksum;

impl LayoutChecksum {
    // NOTE: source layout-custom.c
    pub fn calc(s: &str) -> usize {
        let mut csum: usize = 0;

        let chars = s.chars();
        for chr in chars {
            csum = (csum >> 1) + ((csum & 1) << 15);
            csum += chr as usize;
        }
        csum
    }
}