| File: MemoryExtensions.cs | Web Access |
| Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Text; namespace Microsoft.CodeAnalysis { internal static class MemoryExtensions { public static int IndexOf(this ReadOnlySpan<char> span, char target, int startIndex) { for (int i = startIndex; i < span.Length; i++) { if (span[i] == target) { return i; } } return -1; } public static int IndexOfAny(this ReadOnlySpan<char> span, char[] characters) { for (int i = 0; i < span.Length; i++) { var c = span[i]; foreach (var target in characters) { if (c == target) { return i; } } } return -1; } #if !NETCOREAPP internal static ReadOnlyMemory<char> TrimStart(this ReadOnlyMemory<char> memory) { var span = memory.Span; var index = 0; while (index < span.Length && char.IsWhiteSpace(span[index])) { index++; } return memory.Slice(index, span.Length - index); } internal static ReadOnlyMemory<char> TrimEnd(this ReadOnlyMemory<char> memory) { var span = memory.Span; var length = span.Length; while (length - 1 >= 0 && char.IsWhiteSpace(span[length - 1])) { length--; } return memory.Slice(0, length); } internal static ReadOnlyMemory<char> Trim(this ReadOnlyMemory<char> memory) => memory.TrimStart().TrimEnd(); #endif internal static bool IsNullOrEmpty(this ReadOnlyMemory<char>? memory) => memory is not { Length: > 0 }; internal static bool IsNullOrWhiteSpace(this ReadOnlyMemory<char>? memory) => memory is not { } m || IsWhiteSpace(m); internal static bool IsWhiteSpace(this ReadOnlyMemory<char> memory) { var span = memory.Span; foreach (var c in span) { if (!char.IsWhiteSpace(c)) { return false; } } return true; } internal static bool StartsWith(this ReadOnlyMemory<char> memory, char c) => memory.Length > 0 && memory.Span[0] == c; internal static ReadOnlyMemory<char> Unquote(this ReadOnlyMemory<char> memory) { var span = memory.Span; if (span.Length > 1 && span[0] == '"' && span[span.Length - 1] == '"') { return memory.Slice(1, memory.Length - 2); } return memory; } } }