From c74dc5437430279afe0ab9255c9022acabef2b8b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Thu, 4 Mar 2021 16:50:19 +0100 Subject: [PATCH] use stringbuilder for shape expression parsing --- Crow/src/Widgets/Shape.cs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Crow/src/Widgets/Shape.cs b/Crow/src/Widgets/Shape.cs index 020b0a71..dd8fefdf 100644 --- a/Crow/src/Widgets/Shape.cs +++ b/Crow/src/Widgets/Shape.cs @@ -36,29 +36,31 @@ namespace Crow public class PathParser : StringReader { public PathParser (string str) : base (str) { } - + char[] buffer = new char[20]; double readDouble () { - StringBuilder tmp = new StringBuilder (); + int length = 0; while (Peek () >= 0) { - char c = (char)Read (); - if (c.IsWhiteSpaceOrNewLine ()) { - if (tmp.Length == 0) + buffer[length] = (char)Read (); + if (buffer[length].IsWhiteSpaceOrNewLine ()) { + if (length == 0) continue; else break; - } else if (c == ',') + } else if (buffer[length] == ',') break; - tmp.Append (c); + length++; } - return double.Parse (tmp.ToString ()); + return double.Parse (buffer.AsSpan(0, length)); } public void Draw (Context gr, bool measure = false) { + char c; + try { while (Peek () >= 0) { - char c = (char)Read (); + c = (char)Read (); if (c.IsWhiteSpaceOrNewLine ()) continue; switch (c) { -- 2.47.3