Example #1
0
        public override char Read(Reader reader, int tag)
        {
            var stream = reader.Stream;

            switch (tag)
            {
            case TagUTF8Char:
                return(ValueReader.ReadChar(stream));

            case TagEmpty:
                return('\0');

            case TagInteger:
                return((char)ValueReader.ReadInt(stream));

            case TagLong:
                return((char)ValueReader.ReadLong(stream));

            case TagDouble:
                return((char)ValueReader.ReadDouble(stream));

            case TagString:
                return(Converter <char> .Convert(ReferenceReader.ReadString(reader)));

            default:
                if (tag >= '0' && tag <= '9')
                {
                    return((char)(tag - '0'));
                }
                return(base.Read(reader, tag));
            }
        }
Example #2
0
        public override StringBuilder Read(Reader reader, int tag)
        {
            var stream = reader.Stream;

            switch (tag)
            {
            case TagString:
                return(Converter <StringBuilder> .Convert(ReferenceReader.ReadString(reader)));

            case TagUTF8Char:
                return(new StringBuilder(1).Append(ValueReader.ReadChar(stream)));

            case TagList:
                return(Converter <StringBuilder> .Convert(ReferenceReader.ReadArray <char>(reader)));

            case TagInteger:
            case TagLong:
            case TagDouble:
                return(ValueReader.ReadUntil(stream, TagSemicolon));

            case TagEmpty:
                return(new StringBuilder());

            case TagTrue:
                return(new StringBuilder(bool.TrueString));

            case TagFalse:
                return(new StringBuilder(bool.FalseString));

            case TagNaN:
                return(new StringBuilder(double.NaN.ToString()));

            case TagInfinity:
                return(new StringBuilder(ValueReader.ReadInfinity(stream).ToString()));

            case TagDate:
                return(Converter <StringBuilder> .Convert(ReferenceReader.ReadDateTime(reader)));

            case TagTime:
                return(Converter <StringBuilder> .Convert(ReferenceReader.ReadTime(reader)));

            case TagGuid:
                return(Converter <StringBuilder> .Convert(ReferenceReader.ReadGuid(reader)));

            case TagBytes:
                return(Converter <StringBuilder> .Convert(ReferenceReader.ReadBytes(reader)));

            default:
                if (tag >= '0' && tag <= '9')
                {
                    return(new StringBuilder(1).Append((char)tag));
                }
                return(base.Read(reader, tag));
            }
        }
Example #3
0
        public override bool Read(Reader reader, int tag)
        {
            var stream = reader.Stream;

            switch (tag)
            {
            case TagTrue:
                return(true);

            case TagFalse:
            case TagEmpty:
            case TagNaN:
            case '0':
                return(false);

            case TagInteger:
                return(ValueReader.ReadInt(stream) != 0);

            case TagLong:
                return(!ValueReader.ReadBigInteger(stream).IsZero);

            case TagDouble:
                return(ValueReader.ReadDouble(stream) != 0);

            case TagUTF8Char:
                return("0\0".IndexOf(ValueReader.ReadChar(stream)) == -1);

            case TagString:
                return(Converter <bool> .Convert(ReferenceReader.ReadString(reader)));

            case TagInfinity:
                stream.ReadByte();
                return(true);

            default:
                if (tag >= '1' && tag <= '9')
                {
                    return(true);
                }
                return(base.Read(reader, tag));
            }
        }
        public override T Read(Reader reader, int tag)
        {
            Type type = typeof(T);

            if (tag >= '0' && tag <= '9')
            {
                return((T)Enum.ToObject(type, tag - '0'));
            }
            var stream = reader.Stream;

            switch (tag)
            {
            case TagInteger:
                return((T)Enum.ToObject(type, ValueReader.ReadInt(stream)));

            case TagLong:
                return((T)Enum.ToObject(type, ValueReader.ReadLong(stream)));

            case TagDouble:
                return((T)Enum.ToObject(type, (long)ValueReader.ReadDouble(stream)));

            case TagTrue:
                return((T)Enum.ToObject(type, 1));

            case TagFalse:
            case TagEmpty:
                return((T)Enum.ToObject(type, 0));

            case TagUTF8Char:
                return((T)Enum.ToObject(type, ValueReader.ReadChar(stream)));

            case TagString:
                return(Converter <T> .Convert(ReferenceReader.ReadString(reader)));

            default:
                return(base.Read(reader, tag));
            }
        }
        public override object Read(Reader reader, int tag)
        {
            if (tag >= '0' && tag <= '9')
            {
                return(digitObject[tag - '0']);
            }
            var stream = reader.Stream;

            switch (tag)
            {
            case TagInteger:
                return(ValueReader.ReadInt(stream));

            case TagString:
                return(ReferenceReader.ReadString(reader));

            case TagBytes:
                return(ReferenceReader.ReadBytes(reader));

            case TagTrue:
                return(trueObject);

            case TagFalse:
                return(falseObject);

            case TagEmpty:
                return("");

            case TagObject:
                return(Read(reader));

            case TagRef:
                return(reader.ReadReference());

            case TagDate:
                return(ReferenceReader.ReadDateTime(reader));

            case TagTime:
                return(ReferenceReader.ReadTime(reader));

            case TagGuid:
                return(ReferenceReader.ReadGuid(reader));

            case TagLong:
                switch (reader.LongType)
                {
                case LongType.Int64:
                    return(ValueReader.ReadLong(stream));

                case LongType.UInt64:
                    return((ulong)ValueReader.ReadLong(stream));

                default:
                    return(ValueReader.ReadBigInteger(stream));
                }

            case TagDouble:
                switch (reader.RealType)
                {
                case RealType.Single:
                    return(ValueReader.ReadSingle(stream));

                case RealType.Decimal:
                    return(ValueReader.ReadDecimal(stream));

                default:
                    return(ValueReader.ReadDouble(stream));
                }

            case TagNaN:
                switch (reader.RealType)
                {
                case RealType.Single:
                    return(float.NaN);

                default:
                    return(double.NaN);
                }

            case TagInfinity:
                switch (reader.RealType)
                {
                case RealType.Single:
                    return(ValueReader.ReadSingleInfinity(stream));

                default:
                    return(ValueReader.ReadInfinity(stream));
                }

            case TagUTF8Char:
                switch (reader.CharType)
                {
                case CharType.Char:
                    return(ValueReader.ReadChar(stream));

                default:
                    return(ValueReader.ReadUTF8Char(stream));
                }

            case TagList:
                switch (reader.ListType)
                {
                case ListType.Array:
                    return(ReferenceReader.ReadArray <object>(reader));

                case ListType.ArrayList:
                    return(ListDeserializer <ArrayList> .Read(reader));

                default:
                    return(CollectionDeserializer <List <object>, object> .Read(reader));
                }

            case TagMap:
                switch (reader.DictType)
                {
                case DictType.Dictionary:
                    return(DictionaryDeserializer <Dictionary <object, object>, object, object> .Read(reader));

                case DictType.ExpandoObject:
                    return(ExpandoObjectDeserializer.Read(reader));

                case DictType.Hashtable:
                    return(DictionaryDeserializer <Hashtable> .Read(reader));

                default:
                    return(DictionaryDeserializer <NullableKeyDictionary <object, object>, object, object> .Read(reader));
                }

            case TagError:
                return(new Exception(reader.Deserialize <string>()));

            default:
                return(base.Read(reader, tag));
            }
        }