Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetNonRandomizedHashCodeOrdinalIgnoreCase()

unsafe int System.String.GetNonRandomizedHashCodeOrdinalIgnoreCase ( )
inlinepackage

Definition at line 728 of file String.cs.

729 {
730 uint num = 352654597u;
731 uint num2 = num;
732 fixed (char* ptr = &_firstChar)
733 {
734 uint* ptr2 = (uint*)ptr;
735 int num3 = Length;
736 while (true)
737 {
738 if (num3 > 2)
739 {
740 uint num4 = *ptr2;
741 uint num5 = ptr2[1];
743 {
744 num3 -= 4;
745 num = (BitOperations.RotateLeft(num, 5) + num) ^ (num4 | 0x200020u);
747 ptr2 += 2;
748 continue;
749 }
750 }
751 else
752 {
753 if (num3 <= 0)
754 {
755 break;
756 }
757 uint num6 = *ptr2;
759 {
761 break;
762 }
763 }
764 goto end_IL_0011;
765 }
766 goto IL_00a1;
768 }
770 IL_00a1:
771 return (int)(num + num2 * 1566083941);
772 unsafe static int GetNonRandomizedHashCodeOrdinalIgnoreCaseSlow(string str)
773 {
774 int num7 = str.Length;
775 char[] array = null;
776 Span<char> span = (((uint)num7 >= 64u) ? ((Span<char>)(array = ArrayPool<char>.Shared.Rent(num7 + 1))) : stackalloc char[64]);
779 destination[num7] = '\0';
780 uint num9 = 352654597u;
781 uint num10 = num9;
782 fixed (char* ptr3 = destination)
783 {
784 uint* ptr4 = (uint*)ptr3;
785 while (num7 > 2)
786 {
787 num7 -= 4;
790 ptr4 += 2;
791 }
792 if (num7 > 0)
793 {
795 }
796 }
797 if (array != null)
798 {
799 ArrayPool<char>.Shared.Return(array);
800 }
801 return (int)(num9 + num10 * 1566083941);
802 }
803 }
static int ToUpperOrdinal(ReadOnlySpan< char > source, Span< char > destination)
Definition Ordinal.cs:193
static uint RotateLeft(uint value, int offset)
char _firstChar
Definition String.cs:35
static bool AllCharsInUInt32AreAscii(uint value)

References System.String._firstChar, System.Text.Unicode.Utf16Utility.AllCharsInUInt32AreAscii(), System.array, System.destination, System.String.Length, System.Numerics.BitOperations.RotateLeft(), System.str, and System.Globalization.Ordinal.ToUpperOrdinal().