예제 #1
0
        private static Boolean TryParse(ReadOnlySpan <char> s, NumberStyles style, NumberFormatInfo info, out Single result)
        {
            bool success = Number.TryParseSingle(s, style, info, out result);

            if (!success)
            {
                ReadOnlySpan <char> sTrim = s.Trim();
                if (sTrim.EqualsOrdinal(info.PositiveInfinitySymbol))
                {
                    result = PositiveInfinity;
                }
                else if (sTrim.EqualsOrdinal(info.NegativeInfinitySymbol))
                {
                    result = NegativeInfinity;
                }
                else if (sTrim.EqualsOrdinal(info.NaNSymbol))
                {
                    result = NaN;
                }
                else
                {
                    return(false); // We really failed
                }
            }
            return(true);
        }
예제 #2
0
        internal unsafe static double ParseDouble(ReadOnlySpan <char> value, NumberStyles options, NumberFormatInfo numfmt)
        {
            NumberBuffer number = default;
            double       d      = 0;

            if (!TryStringToNumber(value, options, ref number, numfmt, false))
            {
                //If we failed TryStringToNumber, it may be from one of our special strings.
                //Check the three with which we're concerned and rethrow if it's not one of
                //those strings.
                ReadOnlySpan <char> sTrim = value.Trim();
                if (sTrim.EqualsOrdinal(numfmt.PositiveInfinitySymbol))
                {
                    return(double.PositiveInfinity);
                }
                if (sTrim.EqualsOrdinal(numfmt.NegativeInfinitySymbol))
                {
                    return(double.NegativeInfinity);
                }
                if (sTrim.EqualsOrdinal(numfmt.NaNSymbol))
                {
                    return(double.NaN);
                }
                throw new FormatException(SR.Format_InvalidString);
            }

            if (!NumberBufferToDouble(ref number, ref d))
            {
                throw new OverflowException(SR.Overflow_Double);
            }

            return(d);
        }
예제 #3
0
        private static bool TryParse(ReadOnlySpan <char> s, NumberStyles style, NumberFormatInfo info, out double result)
        {
            bool success = Number.TryParseDouble(s, style, info, out result);

            if (!success)
            {
                ReadOnlySpan <char> sTrim = s.Trim();
                if (StringSpanHelpers.Equals(sTrim, info.PositiveInfinitySymbol))
                {
                    result = PositiveInfinity;
                }
                else if (StringSpanHelpers.Equals(sTrim, info.NegativeInfinitySymbol))
                {
                    result = NegativeInfinity;
                }
                else if (StringSpanHelpers.Equals(sTrim, info.NaNSymbol))
                {
                    result = NaN;
                }
                else
                {
                    return(false); // We really failed
                }
            }
            return(true);
        }
예제 #4
0
        public static bool TryParseExact(
            ReadOnlySpan <char> input,
            ReadOnlySpan <char> format,
            out Guid result)
        {
            if (format.Length != 1)
            {
                result = new Guid();
                return(false);
            }
            input = input.Trim();
            Guid.GuidResult result1 = new Guid.GuidResult(Guid.GuidParseThrowStyle.None);
            bool            flag    = false;

            switch ((char)((uint)format[0] | 32U))
            {
            case 'b':
                flag = Guid.TryParseExactB(input, ref result1);
                break;

            case 'd':
                flag = Guid.TryParseExactD(input, ref result1);
                break;

            case 'n':
                flag = Guid.TryParseExactN(input, ref result1);
                break;

            case 'p':
                flag = Guid.TryParseExactP(input, ref result1);
                break;

            case 'x':
                flag = Guid.TryParseExactX(input, ref result1);
                break;
            }
            if (flag)
            {
                result = result1._parsedGuid;
                return(true);
            }
            result = new Guid();
            return(false);
        }
예제 #5
0
        private static bool TryParseGuid(ReadOnlySpan <char> guidString, ref Guid.GuidResult result)
        {
            guidString = guidString.Trim();
            if (guidString.Length == 0)
            {
                result.SetFailure(false, "Format_GuidUnrecognized");
                return(false);
            }
            switch (guidString[0])
            {
            case '(':
                return(Guid.TryParseExactP(guidString, ref result));

            case '{':
                return(!guidString.Contains <char>('-') ? Guid.TryParseExactX(guidString, ref result) : Guid.TryParseExactB(guidString, ref result));

            default:
                return(!guidString.Contains <char>('-') ? Guid.TryParseExactN(guidString, ref result) : Guid.TryParseExactD(guidString, ref result));
            }
        }
예제 #6
0
        public static Guid ParseExact(ReadOnlySpan <char> input, ReadOnlySpan <char> format)
        {
            if (format.Length != 1)
            {
                throw new FormatException(SR.Format_InvalidGuidFormatSpecification);
            }
            input = input.Trim();
            Guid.GuidResult result = new Guid.GuidResult(Guid.GuidParseThrowStyle.AllButOverflow);
            bool            flag;

            switch ((char)((uint)format[0] | 32U))
            {
            case 'b':
                flag = Guid.TryParseExactB(input, ref result);
                break;

            case 'd':
                flag = Guid.TryParseExactD(input, ref result);
                break;

            case 'n':
                flag = Guid.TryParseExactN(input, ref result);
                break;

            case 'p':
                flag = Guid.TryParseExactP(input, ref result);
                break;

            case 'x':
                flag = Guid.TryParseExactX(input, ref result);
                break;

            default:
                throw new FormatException(SR.Format_InvalidGuidFormatSpecification);
            }
            return(result._parsedGuid);
        }