public void EqualsOrdinal_ComparingVariousInputsBothWays_ReturnsExpected(string leftString, string rightString, bool expected) { char[] left = leftString.ToCharArray(); char[] right = rightString.ToCharArray(); Assert.Equal(expected, CharArrayHelpers.EqualsOrdinal(leftString, right, 0, right.Length)); Assert.Equal(expected, CharArrayHelpers.EqualsOrdinal(rightString, left, 0, left.Length)); }
/// <summary> /// Gets a known header name string from a matching char[] array segment, using an ordinal comparison. /// Used to avoid allocating new strings for known header names. /// </summary> public static bool TryGetHeaderName(char[] array, int startIndex, int length, out string name) { CharArrayHelpers.DebugAssertArrayInputs(array, startIndex, length); return(TryGetHeaderName( array, startIndex, length, (arr, index) => arr[index], (known, arr, start, len) => CharArrayHelpers.EqualsOrdinal(known, arr, start, len), out name)); }
private static string GetReasonPhrase(HttpStatusCode statusCode, char[] buffer, int bufferLength) { CharArrayHelpers.DebugAssertArrayInputs(buffer, 0, bufferLength); Debug.Assert(bufferLength > 0); // If it's a known reason phrase, use the known reason phrase instead of allocating a new string. string knownReasonPhrase = HttpStatusDescription.Get(statusCode); return((knownReasonPhrase != null && CharArrayHelpers.EqualsOrdinal(knownReasonPhrase, buffer, 0, bufferLength)) ? knownReasonPhrase : new string(buffer, 0, bufferLength)); }
/// <summary> /// Returns true if <paramref name="known"/> matches the <paramref name="key"/> char[] array segment, /// using an ordinal comparison. /// </summary> private static bool TryMatch(string known, char[] key, int startIndex, int length, out string name) { Debug.Assert(known != null); Debug.Assert(known.Length > 0); CharArrayHelpers.DebugAssertArrayInputs(key, startIndex, length); // The lengths should be equal because this method is only called // from within a "switch (length) { ... }". Debug.Assert(known.Length == length); if (CharArrayHelpers.EqualsOrdinal(known, key, startIndex, length)) { name = known; return(true); } name = null; return(false); }