Beispiel #1
0
        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));
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        /// <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);
        }