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

◆ SequenceEqual< T >()

static bool System.SpanHelpers.SequenceEqual< T > ( ref T first,
ref T second,
int length )
inlinestatic
Type Constraints
T :IEquatable<T> 

Definition at line 3816 of file SpanHelpers.cs.

3817 {
3818 if (!Unsafe.AreSame(ref first, ref second))
3819 {
3820 nint num = 0;
3821 while (true)
3822 {
3823 if (length >= 8)
3824 {
3825 length -= 8;
3826 T val = Unsafe.Add(ref first, num);
3827 T val2 = Unsafe.Add(ref second, num);
3828 if (val?.Equals(val2) ?? (val2 == null))
3829 {
3830 val = Unsafe.Add(ref first, num + 1);
3831 val2 = Unsafe.Add(ref second, num + 1);
3832 if (val?.Equals(val2) ?? (val2 == null))
3833 {
3834 val = Unsafe.Add(ref first, num + 2);
3835 val2 = Unsafe.Add(ref second, num + 2);
3836 if (val?.Equals(val2) ?? (val2 == null))
3837 {
3838 val = Unsafe.Add(ref first, num + 3);
3839 val2 = Unsafe.Add(ref second, num + 3);
3840 if (val?.Equals(val2) ?? (val2 == null))
3841 {
3842 val = Unsafe.Add(ref first, num + 4);
3843 val2 = Unsafe.Add(ref second, num + 4);
3844 if (val?.Equals(val2) ?? (val2 == null))
3845 {
3846 val = Unsafe.Add(ref first, num + 5);
3847 val2 = Unsafe.Add(ref second, num + 5);
3848 if (val?.Equals(val2) ?? (val2 == null))
3849 {
3850 val = Unsafe.Add(ref first, num + 6);
3851 val2 = Unsafe.Add(ref second, num + 6);
3852 if (val?.Equals(val2) ?? (val2 == null))
3853 {
3854 val = Unsafe.Add(ref first, num + 7);
3855 val2 = Unsafe.Add(ref second, num + 7);
3856 if (val?.Equals(val2) ?? (val2 == null))
3857 {
3858 num += 8;
3859 continue;
3860 }
3861 }
3862 }
3863 }
3864 }
3865 }
3866 }
3867 }
3868 }
3869 else
3870 {
3871 if (length < 4)
3872 {
3873 goto IL_03b8;
3874 }
3875 length -= 4;
3876 T val = Unsafe.Add(ref first, num);
3877 T val2 = Unsafe.Add(ref second, num);
3878 if (val?.Equals(val2) ?? (val2 == null))
3879 {
3880 val = Unsafe.Add(ref first, num + 1);
3881 val2 = Unsafe.Add(ref second, num + 1);
3882 if (val?.Equals(val2) ?? (val2 == null))
3883 {
3884 val = Unsafe.Add(ref first, num + 2);
3885 val2 = Unsafe.Add(ref second, num + 2);
3886 if (val?.Equals(val2) ?? (val2 == null))
3887 {
3888 val = Unsafe.Add(ref first, num + 3);
3889 val2 = Unsafe.Add(ref second, num + 3);
3890 if (val?.Equals(val2) ?? (val2 == null))
3891 {
3892 num += 4;
3893 goto IL_03b8;
3894 }
3895 }
3896 }
3897 }
3898 }
3899 goto IL_03be;
3900 IL_03b8:
3901 while (length > 0)
3902 {
3903 T val = Unsafe.Add(ref first, num);
3904 T val2 = Unsafe.Add(ref second, num);
3905 if (val?.Equals(val2) ?? (val2 == null))
3906 {
3907 num++;
3908 length--;
3909 continue;
3910 }
3911 goto IL_03be;
3912 }
3913 break;
3914 IL_03be:
3915 return false;
3916 }
3917 }
3918 return true;
3919 }

References System.length.