예제 #1
0
파일: Utf8String.cs 프로젝트: vebin/runtime
        /// <summary>
        /// Returns a hash code using the specified <see cref="StringComparison"/>.
        /// </summary>
        public int GetHashCode(StringComparison comparison)
        {
            // TODO_UTF8STRING: This perf can be improved, including removing
            // the virtual dispatch by putting the switch directly in this method.

            return(Utf8StringComparer.FromComparison(comparison).GetHashCode(this));
        }
예제 #2
0
파일: Utf8String.cs 프로젝트: vebin/runtime
        /// <summary>
        /// Performs an equality comparison using the specified <see cref="StringComparison"/>.
        /// </summary>
        public static bool Equals(Utf8String?a, Utf8String?b, StringComparison comparison)
        {
            // TODO_UTF8STRING: This perf can be improved, including removing
            // the virtual dispatch by putting the switch directly in this method.

            return(Utf8StringComparer.FromComparison(comparison).Equals(a, b));
        }
예제 #3
0
    public void RandomFlatBufferStringComparison()
    {
        Random rng = new Random();
        int    min = char.MinValue;
        int    max = char.MaxValue;

        for (int i = 0; i < 10000; ++i)
        {
            StringBuilder sb  = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            for (int j = 0; j < 100; ++j)
            {
                sb.Append((char)rng.Next(min, max));
                sb2.Append((char)rng.Next(min, max));
            }

            string str  = sb.ToString();
            string str2 = sb2.ToString();

            Span <byte> span  = SerializationHelpers.Encoding.GetBytes(str);
            Span <byte> span2 = SerializationHelpers.Encoding.GetBytes(str2);

            Utf8StringComparer utf8Comparer = new Utf8StringComparer();
            Assert.Equal(0, StringSpanComparer.Instance.Compare(true, span, true, span));
            Assert.Equal(0, utf8Comparer.Compare(str, str));

            Assert.Equal(0, StringSpanComparer.Instance.Compare(true, span2, true, span2));
            Assert.Equal(0, utf8Comparer.Compare(str2, str2));

            int expected = utf8Comparer.Compare(str, str2);
            int actual   = StringSpanComparer.Instance.Compare(true, span, true, span2);
            Assert.Equal(expected, actual);

            expected = utf8Comparer.Compare(str2, str);
            actual   = StringSpanComparer.Instance.Compare(true, span2, true, span);
            Assert.Equal(expected, actual);
        }
    }
예제 #4
0
        public int CompareTo(Utf8String?other, StringComparison comparison)
        {
            // TODO_UTF8STRING: We can avoid the virtual dispatch by moving the switch into this method.

            return(Utf8StringComparer.FromComparison(comparison).Compare(this, other));
        }