Mercurial > public > mercurial-scm > hg
comparison rust/hg-core/src/revlog/path_encode.rs @ 50162:6baea276a985
rhg: use generic DestArr in hash_mangle
This simplifies code a bit more, but comes with an extra memory copy
in case [destlen == dest_vec.len()].
This is probably fine, but a follow-up change is removing that too.
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Thu, 16 Feb 2023 18:46:44 +0000 |
parents | 5d7ba99da3b8 |
children | 11661326b410 |
comparison
equal
deleted
inserted
replaced
50161:5d7ba99da3b8 | 50162:6baea276a985 |
---|---|
543 let last_dot: Option<usize> = { | 543 let last_dot: Option<usize> = { |
544 let s = last_slash.unwrap_or(0); | 544 let s = last_slash.unwrap_or(0); |
545 src[s..].iter().rposition(|b| *b == b'.').map(|i| i + s) | 545 src[s..].iter().rposition(|b| *b == b'.').map(|i| i + s) |
546 }; | 546 }; |
547 | 547 |
548 let mut dest_vec = vec![0; MAXSTOREPATHLEN]; | 548 let mut dest : DestArr<MAXSTOREPATHLEN> = DestArr::create(); |
549 let mut dest = Dest::create(&mut dest_vec); | |
550 dest.write_bytes(b"dh/"); | 549 dest.write_bytes(b"dh/"); |
551 | 550 |
552 if let Some(last_slash) = last_slash { | 551 if let Some(last_slash) = last_slash { |
553 for slice in src[..last_slash].split(|b| *b == b'/') { | 552 for slice in src[..last_slash].split(|b| *b == b'/') { |
554 let slice = &slice[..std::cmp::min(slice.len(), dirprefixlen)]; | 553 let slice = &slice[..std::cmp::min(slice.len(), dirprefixlen)]; |
588 hexencode(&mut dest, *c); | 587 hexencode(&mut dest, *c); |
589 } | 588 } |
590 if let Some(l) = last_dot { | 589 if let Some(l) = last_dot { |
591 dest.write_bytes(&src[l..]); | 590 dest.write_bytes(&src[l..]); |
592 } | 591 } |
593 let destlen = dest.len; | 592 dest.contents().to_vec() |
594 if destlen == dest_vec.len() { | |
595 dest_vec | |
596 } else { | |
597 // sometimes the path are shorter than MAXSTOREPATHLEN | |
598 dest_vec[..destlen].to_vec() | |
599 } | |
600 } | 593 } |
601 | 594 |
602 fn hash_encode(src: &[u8]) -> Vec<u8> { | 595 fn hash_encode(src: &[u8]) -> Vec<u8> { |
603 let mut dired: DestArr<MAXENCODE> = DestArr::create(); | 596 let mut dired: DestArr<MAXENCODE> = DestArr::create(); |
604 let mut lowered: DestArr<MAXENCODE> = DestArr::create(); | 597 let mut lowered: DestArr<MAXENCODE> = DestArr::create(); |