/rust/registry/src/index.crates.io-1949cf8c6b5b557f/imara-diff-0.1.8/src/util.rs
Line | Count | Source |
1 | | use crate::intern::Token; |
2 | | |
3 | 785M | pub fn common_prefix(file1: &[Token], file2: &[Token]) -> u32 { |
4 | 785M | let mut off = 0; |
5 | 998M | for (token1, token2) in file1.iter().zip(file2) { |
6 | 998M | if token1 != token2 { |
7 | 781M | break; |
8 | 217M | } |
9 | 217M | off += 1; |
10 | | } |
11 | 785M | off |
12 | 785M | } |
13 | | |
14 | 803M | pub fn common_postfix(file1: &[Token], file2: &[Token]) -> u32 { |
15 | 803M | let mut off = 0; |
16 | 998M | for (token1, token2) in file1.iter().rev().zip(file2.iter().rev()) { |
17 | 998M | if token1 != token2 { |
18 | 799M | break; |
19 | 199M | } |
20 | 199M | off += 1; |
21 | | } |
22 | 803M | off |
23 | 803M | } |
24 | | |
25 | 4.93M | pub fn common_edges(file1: &[Token], file2: &[Token]) -> (u32, u32) { |
26 | 4.93M | let prefix = common_prefix(file1, file2); |
27 | 4.93M | let postfix = common_postfix(&file1[prefix as usize..], &file2[prefix as usize..]); |
28 | 4.93M | (prefix, postfix) |
29 | 4.93M | } |
30 | | |
31 | 227k | pub fn strip_common_prefix(file1: &mut &[Token], file2: &mut &[Token]) -> u32 { |
32 | 227k | let off = common_prefix(file1, file2); |
33 | 227k | *file1 = &file1[off as usize..]; |
34 | 227k | *file2 = &file2[off as usize..]; |
35 | 227k | off |
36 | 227k | } |
37 | | |
38 | 227k | pub fn strip_common_postfix(file1: &mut &[Token], file2: &mut &[Token]) -> u32 { |
39 | 227k | let off = common_postfix(file1, file2); |
40 | 227k | *file1 = &file1[..file1.len() - off as usize]; |
41 | 227k | *file2 = &file2[..file2.len() - off as usize]; |
42 | 227k | off |
43 | 227k | } |
44 | | |
45 | 472k | pub fn sqrt(val: usize) -> u32 { |
46 | 472k | let nbits = (usize::BITS - val.leading_zeros()) / 2; |
47 | 472k | 1 << nbits |
48 | 472k | } |