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

◆ TryParseDateTimeOffsetR()

static bool System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetR ( ReadOnlySpan< byte > source,
uint caseFlipXorMask,
out DateTimeOffset dateTimeOffset,
out int bytesConsumed )
inlinestaticprivate

Definition at line 770 of file Utf8Parser.cs.

771 {
772 if (source.Length < 29)
773 {
774 bytesConsumed = 0;
775 dateTimeOffset = default(DateTimeOffset);
776 return false;
777 }
778 uint num = source[0] ^ caseFlipXorMask;
779 uint num2 = source[1];
780 uint num3 = source[2];
781 uint num4 = source[3];
782 DayOfWeek dayOfWeek;
783 switch ((num << 24) | (num2 << 16) | (num3 << 8) | num4)
784 {
785 case 1400204844u:
786 dayOfWeek = DayOfWeek.Sunday;
787 break;
788 case 1299148332u:
789 dayOfWeek = DayOfWeek.Monday;
790 break;
791 case 1416979756u:
792 dayOfWeek = DayOfWeek.Tuesday;
793 break;
794 case 1466262572u:
795 dayOfWeek = DayOfWeek.Wednesday;
796 break;
797 case 1416131884u:
798 dayOfWeek = DayOfWeek.Thursday;
799 break;
800 case 1181903148u:
801 dayOfWeek = DayOfWeek.Friday;
802 break;
803 case 1398895660u:
804 dayOfWeek = DayOfWeek.Saturday;
805 break;
806 default:
807 bytesConsumed = 0;
808 dateTimeOffset = default(DateTimeOffset);
809 return false;
810 }
811 if (source[4] != 32)
812 {
813 bytesConsumed = 0;
814 dateTimeOffset = default(DateTimeOffset);
815 return false;
816 }
817 uint num5 = (uint)(source[5] - 48);
818 uint num6 = (uint)(source[6] - 48);
819 if (num5 > 9 || num6 > 9)
820 {
821 bytesConsumed = 0;
822 dateTimeOffset = default(DateTimeOffset);
823 return false;
824 }
825 int day = (int)(num5 * 10 + num6);
826 if (source[7] != 32)
827 {
828 bytesConsumed = 0;
829 dateTimeOffset = default(DateTimeOffset);
830 return false;
831 }
832 uint num7 = source[8] ^ caseFlipXorMask;
833 uint num8 = source[9];
834 uint num9 = source[10];
835 uint num10 = source[11];
836 int month;
837 switch ((num7 << 24) | (num8 << 16) | (num9 << 8) | num10)
838 {
839 case 1247899168u:
840 month = 1;
841 break;
842 case 1181049376u:
843 month = 2;
844 break;
845 case 1298231840u:
846 month = 3;
847 break;
848 case 1097888288u:
849 month = 4;
850 break;
851 case 1298233632u:
852 month = 5;
853 break;
854 case 1249209888u:
855 month = 6;
856 break;
857 case 1249209376u:
858 month = 7;
859 break;
860 case 1098213152u:
861 month = 8;
862 break;
863 case 1399156768u:
864 month = 9;
865 break;
866 case 1331917856u:
867 month = 10;
868 break;
869 case 1315927584u:
870 month = 11;
871 break;
872 case 1147495200u:
873 month = 12;
874 break;
875 default:
876 bytesConsumed = 0;
877 dateTimeOffset = default(DateTimeOffset);
878 return false;
879 }
880 uint num11 = (uint)(source[12] - 48);
881 uint num12 = (uint)(source[13] - 48);
882 uint num13 = (uint)(source[14] - 48);
883 uint num14 = (uint)(source[15] - 48);
884 if (num11 > 9 || num12 > 9 || num13 > 9 || num14 > 9)
885 {
886 bytesConsumed = 0;
887 dateTimeOffset = default(DateTimeOffset);
888 return false;
889 }
890 int year = (int)(num11 * 1000 + num12 * 100 + num13 * 10 + num14);
891 if (source[16] != 32)
892 {
893 bytesConsumed = 0;
894 dateTimeOffset = default(DateTimeOffset);
895 return false;
896 }
897 uint num15 = (uint)(source[17] - 48);
898 uint num16 = (uint)(source[18] - 48);
899 if (num15 > 9 || num16 > 9)
900 {
901 bytesConsumed = 0;
902 dateTimeOffset = default(DateTimeOffset);
903 return false;
904 }
905 int hour = (int)(num15 * 10 + num16);
906 if (source[19] != 58)
907 {
908 bytesConsumed = 0;
909 dateTimeOffset = default(DateTimeOffset);
910 return false;
911 }
912 uint num17 = (uint)(source[20] - 48);
913 uint num18 = (uint)(source[21] - 48);
914 if (num17 > 9 || num18 > 9)
915 {
916 bytesConsumed = 0;
917 dateTimeOffset = default(DateTimeOffset);
918 return false;
919 }
920 int minute = (int)(num17 * 10 + num18);
921 if (source[22] != 58)
922 {
923 bytesConsumed = 0;
924 dateTimeOffset = default(DateTimeOffset);
925 return false;
926 }
927 uint num19 = (uint)(source[23] - 48);
928 uint num20 = (uint)(source[24] - 48);
929 if (num19 > 9 || num20 > 9)
930 {
931 bytesConsumed = 0;
932 dateTimeOffset = default(DateTimeOffset);
933 return false;
934 }
935 int second = (int)(num19 * 10 + num20);
936 uint num21 = source[25];
937 uint num22 = source[26] ^ caseFlipXorMask;
938 uint num23 = source[27] ^ caseFlipXorMask;
939 uint num24 = source[28] ^ caseFlipXorMask;
940 uint num25 = (num21 << 24) | (num22 << 16) | (num23 << 8) | num24;
941 if (num25 != 541543764)
942 {
943 bytesConsumed = 0;
944 dateTimeOffset = default(DateTimeOffset);
945 return false;
946 }
947 if (!TryCreateDateTimeOffset(year, month, day, hour, minute, second, 0, offsetNegative: false, 0, 0, out dateTimeOffset))
948 {
949 bytesConsumed = 0;
950 dateTimeOffset = default(DateTimeOffset);
951 return false;
952 }
953 if (dayOfWeek != dateTimeOffset.DayOfWeek)
954 {
955 bytesConsumed = 0;
956 dateTimeOffset = default(DateTimeOffset);
957 return false;
958 }
959 bytesConsumed = 29;
960 return true;
961 }
static bool TryCreateDateTimeOffset(DateTime dateTime, bool offsetNegative, int offsetHours, int offsetMinutes, out DateTimeOffset value)
DayOfWeek
Definition DayOfWeek.cs:4

References System.source, System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffset(), and System.year.

Referenced by System.Buffers.Text.Utf8Parser.TryParse(), and System.Buffers.Text.Utf8Parser.TryParse().