Beispiel #1
0
        private static bool parseNumber(JSONParser.Context ctx, bool ignoreDecimal)
        {
            ctx.sb.Length = 0;
            if ((int)ctx.src[ctx.pos] == 45)
            {
                ctx.sb.Append('-');
                ++ctx.pos;
            }
            if (!JSONParser.readDigits(ctx))
            {
                throw new JSONParser.InvalidNumberException(ctx);
            }
            int length = ctx.sb.Length;

            if (ctx.pos < ctx.src.Length)
            {
                if ((int)ctx.src[ctx.pos] == 46)
                {
                    ctx.sb.Append('.');
                    ++ctx.pos;
                    if (!JSONParser.readDigits(ctx))
                    {
                        throw new JSONParser.InvalidNumberException(ctx);
                    }
                }
                if (ctx.pos < ctx.src.Length && ((int)ctx.src[ctx.pos] == 101 || (int)ctx.src[ctx.pos] == 69))
                {
                    ctx.sb.Append(ctx.src[ctx.pos]);
                    ++ctx.pos;
                    if (ctx.pos >= ctx.src.Length)
                    {
                        throw new JSONParser.InvalidNumberException(ctx);
                    }
                    if ((int)ctx.src[ctx.pos] == 43 || (int)ctx.src[ctx.pos] == 45)
                    {
                        ctx.sb.Append(ctx.src[ctx.pos]);
                        ++ctx.pos;
                    }
                    else if (!char.IsDigit(ctx.src[ctx.pos]))
                    {
                        throw new JSONParser.InvalidNumberException(ctx);
                    }
                    if (!JSONParser.readDigits(ctx))
                    {
                        throw new JSONParser.InvalidNumberException(ctx);
                    }
                }
            }
            if (ignoreDecimal)
            {
                ctx.sb.Length = length;
            }
            return(true);
        }