##// END OF EJS Templates
rhg: in path_encode, use Vec directly instead of VecDest...
Arseniy Alekseyev -
r51059:8e50aa0d default
parent child Browse files
Show More
@@ -77,29 +77,17 b' impl<const N: usize> Sink for DestArr<N>'
77 }
77 }
78 }
78 }
79
79
80 struct VecDest {
81 buf: Vec<u8>,
82 }
83
84 struct MeasureDest {
80 struct MeasureDest {
85 pub len: usize,
81 pub len: usize,
86 }
82 }
87
83
88 impl VecDest {
84 impl Sink for Vec<u8> {
89 pub fn create(capacity : usize) -> Self {
90 Self {
91 buf: Vec::with_capacity(capacity),
92 }
93 }
94 }
95
96 impl Sink for VecDest {
97 fn write_byte(&mut self, c: u8) {
85 fn write_byte(&mut self, c: u8) {
98 self.buf.push(c)
86 self.push(c)
99 }
87 }
100
88
101 fn write_bytes(&mut self, src: &[u8]) {
89 fn write_bytes(&mut self, src: &[u8]) {
102 self.buf.extend_from_slice(src)
90 self.extend_from_slice(src)
103 }
91 }
104 }
92 }
105
93
@@ -544,13 +532,13 b' fn hash_mangle(src: &[u8], sha: &[u8]) -'
544 src[s..].iter().rposition(|b| *b == b'.').map(|i| i + s)
532 src[s..].iter().rposition(|b| *b == b'.').map(|i| i + s)
545 };
533 };
546
534
547 let mut dest : VecDest = VecDest::create(MAXSTOREPATHLEN);
535 let mut dest = Vec::with_capacity(MAXSTOREPATHLEN);
548 dest.write_bytes(b"dh/");
536 dest.write_bytes(b"dh/");
549
537
550 if let Some(last_slash) = last_slash {
538 if let Some(last_slash) = last_slash {
551 for slice in src[..last_slash].split(|b| *b == b'/') {
539 for slice in src[..last_slash].split(|b| *b == b'/') {
552 let slice = &slice[..std::cmp::min(slice.len(), dirprefixlen)];
540 let slice = &slice[..std::cmp::min(slice.len(), dirprefixlen)];
553 if dest.buf.len() + slice.len() > maxshortdirslen + 3 {
541 if dest.len() + slice.len() > maxshortdirslen + 3 {
554 break;
542 break;
555 } else {
543 } else {
556 dest.write_bytes(slice);
544 dest.write_bytes(slice);
@@ -559,7 +547,7 b' fn hash_mangle(src: &[u8], sha: &[u8]) -'
559 }
547 }
560 }
548 }
561
549
562 let used = dest.buf.len() + 40 + {
550 let used = dest.len() + 40 + {
563 if let Some(l) = last_dot {
551 if let Some(l) = last_dot {
564 src.len() - l
552 src.len() - l
565 } else {
553 } else {
@@ -588,7 +576,7 b' fn hash_mangle(src: &[u8], sha: &[u8]) -'
588 if let Some(l) = last_dot {
576 if let Some(l) = last_dot {
589 dest.write_bytes(&src[l..]);
577 dest.write_bytes(&src[l..]);
590 }
578 }
591 dest.buf
579 dest
592 }
580 }
593
581
594 fn hash_encode(src: &[u8]) -> Vec<u8> {
582 fn hash_encode(src: &[u8]) -> Vec<u8> {
@@ -618,10 +606,10 b' pub fn path_encode(path: &[u8]) -> Vec<u'
618 if newlen == path.len() {
606 if newlen == path.len() {
619 path.to_vec()
607 path.to_vec()
620 } else {
608 } else {
621 let mut dest = VecDest::create(newlen);
609 let mut dest = Vec::with_capacity(newlen);
622 basic_encode(&mut dest, path);
610 basic_encode(&mut dest, path);
623 assert!(dest.buf.len() == newlen);
611 assert!(dest.len() == newlen);
624 dest.buf
612 dest
625 }
613 }
626 } else {
614 } else {
627 hash_encode(path)
615 hash_encode(path)
General Comments 0
You need to be logged in to leave comments. Login now