예제 #1
0
    private BonValue NextBoolean()
    {
        myIndex--;
        int  startIndex = myIndex;
        char c          = Next();

        if (c == 'f')
        {
            if (!IsIndexInBounds(startIndex + 5 - 1))
            {
                throw SyntaxError("Cast false error");
            }
            if (new string(mySource, startIndex, 5) != "false")
            {
                throw SyntaxError("Cast false error");
            }
            myIndex += 4;
            BonBoolean v = new BonBoolean(false);
            return(v);
        }
        else
        {
            if (!IsIndexInBounds(startIndex + 4 - 1))
            {
                throw SyntaxError("Cast true error");
            }
            if (new string(mySource, startIndex, 4) != "true")
            {
                throw SyntaxError("Cast true error");
            }
            myIndex += 3;
            BonBoolean v = new BonBoolean(true);
            return(v);
        }
    }
예제 #2
0
    public BonValue Read()
    {
        try {
            BonValueType type = (BonValueType)br.ReadByte();
            switch (type)
            {
            case BonValueType.Array: return(ReadArray());

            case BonValueType.Document: return(ReadDoc());

            case BonValueType.Binary: return(ReadBinary());

            case BonValueType.Boolean:
            {
                BonBoolean v = new BonBoolean(br.ReadByte() != 0);
                return(v);
            }

            case BonValueType.Double:
            {
                BonDouble v = new BonDouble(br.ReadDouble());
                return(v);
            }

            case BonValueType.Float:
            {
                BonFloat v = new BonFloat(br.ReadSingle());
                return(v);
            }

            case BonValueType.Int:
            {
                BonInt v = new BonInt(br.ReadInt32());
                return(v);
            }

            case BonValueType.Long:
            {
                BonLong v = new BonLong(br.ReadInt64());
                return(v);
            }

            case BonValueType.Null: return(BonNull.value);

            case BonValueType.String:
            {
                BonString v = new BonString(br.ReadString());
                return(v);
            }

            default: return(null);
            }
        } catch (Exception e) {
            throw SyntaxError(e.Message);
        }
    }