Reduce allocations

This commit is contained in:
Aode (Lion) 2022-05-15 23:30:30 -05:00
parent 54b47da5a2
commit 6f67cfce02

View file

@ -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)