|
1 | 1 | using CommunityToolkit.Mvvm.DependencyInjection; |
2 | 2 | using Flow.Launcher.Plugin.SharedModels; |
3 | 3 | using System; |
| 4 | +using System.Buffers; |
4 | 5 | using System.Collections.Generic; |
| 6 | +using System.ComponentModel.DataAnnotations; |
5 | 7 | using System.Globalization; |
6 | 8 | using System.Linq; |
7 | 9 | using System.Text; |
8 | 10 | using Flow.Launcher.Infrastructure.UserSettings; |
| 11 | +using JetBrains.Annotations; |
9 | 12 |
|
10 | 13 | namespace Flow.Launcher.Infrastructure |
11 | 14 | { |
@@ -256,14 +259,23 @@ public MatchResult FuzzyMatch(string query, string stringToCompare, MatchOption |
256 | 259 | }; |
257 | 260 | public static string Normalize(string value) |
258 | 261 | { |
259 | | - Span<char> buffer = stackalloc char[value.Length]; |
260 | | - for (int i = 0; i < value.Length; i++) |
| 262 | + if(string.IsNullOrEmpty(value)) return value; |
| 263 | + char[] arrayFromPool = null; |
| 264 | + Span<char> buffer = value.Length <= 512 ? stackalloc char[value.Length] : (arrayFromPool = ArrayPool<char>.Shared.Rent(value.Length)); |
| 265 | + try |
261 | 266 | { |
262 | | - var c = char.ToLowerInvariant(value[i]); |
263 | | - buffer[i] = AccentMap.TryGetValue(c, out var mapped) ? mapped : c; |
| 267 | + for (int i = 0; i < value.Length; i++) |
| 268 | + { |
| 269 | + var c = char.ToLowerInvariant(value[i]); |
| 270 | + buffer[i] = AccentMap.TryGetValue(c, out var mapped) ? mapped : c; |
| 271 | + } |
| 272 | + return new string(buffer.Slice(0, value.Length)); |
| 273 | + } |
| 274 | + finally |
| 275 | + { |
| 276 | + if(arrayFromPool != null) |
| 277 | + ArrayPool<char>.Shared.Return(arrayFromPool); |
264 | 278 | } |
265 | | - |
266 | | - return new string(buffer); |
267 | 279 | } |
268 | 280 | private static bool IsAcronym(string stringToCompare, int compareStringIndex) |
269 | 281 | { |
|
0 commit comments