]> git.proxmox.com Git - rustc.git/blame - vendor/imara-diff/src/util.rs
New upstream version 1.73.0+dfsg1
[rustc.git] / vendor / imara-diff / src / util.rs
CommitLineData
0a29b90c
FG
1use crate::intern::Token;
2
3pub fn common_prefix(file1: &[Token], file2: &[Token]) -> u32 {
4 let mut off = 0;
5 for (token1, token2) in file1.iter().zip(file2) {
6 if token1 != token2 {
7 break;
8 }
9 off += 1;
10 }
11 off
12}
13
14pub fn common_postfix(file1: &[Token], file2: &[Token]) -> u32 {
15 let mut off = 0;
16 for (token1, token2) in file1.iter().rev().zip(file2.iter().rev()) {
17 if token1 != token2 {
18 break;
19 }
20 off += 1;
21 }
22 off
23}
24
25pub fn common_edges(file1: &[Token], file2: &[Token]) -> (u32, u32) {
26 let prefix = common_prefix(file1, file2);
27 let postfix = common_postfix(&file1[prefix as usize..], &file2[prefix as usize..]);
28 (prefix, postfix)
29}
30
31pub fn strip_common_prefix(file1: &mut &[Token], file2: &mut &[Token]) -> u32 {
32 let off = common_prefix(file1, file2);
33 *file1 = &file1[off as usize..];
34 *file2 = &file2[off as usize..];
35 off
36}
37
38pub fn strip_common_postfix(file1: &mut &[Token], file2: &mut &[Token]) -> u32 {
39 let off = common_postfix(file1, file2);
40 *file1 = &file1[..file1.len() - off as usize];
41 *file2 = &file2[..file2.len() - off as usize];
42 off
43}
44
45pub fn sqrt(val: usize) -> u32 {
46 let nbits = (usize::BITS as u32 - val.leading_zeros()) / 2;
47 1 << nbits
48}