From 40af63902e0af313722dfdc19a6d10a1d2ba29f4 Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Sun, 29 Dec 2024 00:18:14 +0300 Subject: Improve attrs_from_sgr_parameters performance Instead of collecting all the data into the vector just dispatch it right away avoiding allocations. --- src/ansi.rs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'src/ansi.rs') diff --git a/src/ansi.rs b/src/ansi.rs index 59b17e6..8cac26d 100644 --- a/src/ansi.rs +++ b/src/ansi.rs @@ -1620,12 +1620,7 @@ where if params.is_empty() { handler.terminal_attribute(Attr::Reset); } else { - for attr in attrs_from_sgr_parameters(&mut params_iter) { - match attr { - Some(attr) => handler.terminal_attribute(attr), - None => unhandled!(), - } - } + attrs_from_sgr_parameters(*handler, &mut params_iter); } }, ('m', [b'>']) => { @@ -1769,9 +1764,7 @@ where } #[inline] -fn attrs_from_sgr_parameters(params: &mut ParamsIter<'_>) -> Vec> { - let mut attrs = Vec::with_capacity(params.size_hint().0); - +fn attrs_from_sgr_parameters(handler: &mut H, params: &mut ParamsIter<'_>) { while let Some(param) = params.next() { let attr = match param { [0] => Some(Attr::Reset), @@ -1851,10 +1844,12 @@ fn attrs_from_sgr_parameters(params: &mut ParamsIter<'_>) -> Vec> { [107] => Some(Attr::Background(Color::Named(NamedColor::BrightWhite))), _ => None, }; - attrs.push(attr); - } - attrs + match attr { + Some(attr) => handler.terminal_attribute(attr), + None => continue, + } + } } /// Handle colon separated rgb color escape sequence. -- cgit