Reduce allocations
This commit is contained in:
parent
54b47da5a2
commit
6f67cfce02
|
@ -65,20 +65,20 @@ fn split<'a, 'b>(s: &'a [u8], items: &'b [u8]) -> Split<'a, 'b> {
|
|||
Split(Some(s), items)
|
||||
}
|
||||
|
||||
fn do_escape(s: &[u8], escaped_codes: &[u8], escape_token: u8) -> Vec<u8> {
|
||||
fn do_escape<'a>(s: &'a [u8], escaped_codes: &[u8], escape_token: u8) -> Cow<'a, [u8]> {
|
||||
match escaped_codes {
|
||||
[] => s.to_vec(),
|
||||
[first, rest @ ..] => join(
|
||||
[] => Cow::Borrowed(s),
|
||||
[first, rest @ ..] => Cow::Owned(join(
|
||||
split(s, &[*first]).map(|part| do_escape(part, rest, escape_token)),
|
||||
&[escape_token, *first],
|
||||
),
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn escape<'a>(s: &'a [u8], delimiter: u8, escape_token: u8) -> Cow<'a, [u8]> {
|
||||
let escaped_codes = &[escape_token, delimiter];
|
||||
if find_any(&s, escaped_codes).is_some() {
|
||||
return Cow::Owned(do_escape(s, escaped_codes, escape_token));
|
||||
return do_escape(s, escaped_codes, escape_token);
|
||||
}
|
||||
|
||||
Cow::Borrowed(s)
|
||||
|
|
Loading…
Reference in a new issue