Esempio n. 1
0
        public static Guid Deserialize(BufferedTextReader sr, int nextToken)
        {
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
            }
            var buffer = sr.SmallBuffer;
            var i      = sr.Read(buffer, 0, 33);

            nextToken = buffer[i - 1];
            for (; nextToken != '"' && i < buffer.Length; i++)
            {
                nextToken = sr.Read();
                buffer[i] = (char)nextToken;
            }
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
            }
            if (i == 33)
            {
                return(ParseGuid32(buffer));
            }
            else if (i == 37)
            {
                return(ParseGuid36(buffer));
            }
            return(new Guid(new string(buffer, 0, i - 1)));
        }
Esempio n. 2
0
		public static List<DateTime?> ParseNullableCollection(BufferedTextReader reader, int context)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			var escaped = cur == '"' || cur == '\\';
			if (escaped)
				reader.Read(context);
			var list = new List<DateTime?>();
			cur = reader.Peek();
			if (cur == '}')
				reader.Read();
			while (cur != -1 && cur != '}')
			{
				cur = reader.Read();
				if (cur == 'N')
				{
					cur = reader.Read(4);
					list.Add(null);
				}
				else
				{
					list.Add(ParseDate(reader, cur));
					cur = reader.Read();
				}
			}
			if (escaped)
				reader.Read(context + 1);
			else
				reader.Read();
			return list;
		}
Esempio n. 3
0
 public static decimal DeserializeDecimal(BufferedTextReader sr, ref int nextToken)
 {
     if (nextToken == '"')
     {
         sr.InitBuffer();
         sr.FillUntil('"');
         nextToken = sr.Read(2);
         try
         {
             return sr.BufferToValue(ConvertToDecimal);
         }
         catch (Exception ex)
         {
             throw new SerializationException("Error parsing decimal at " + JsonSerialization.PositionInStream(sr) + ". " + ex.Message, ex);
         }
     }
     var buf = sr.SmallBuffer;
     buf[0] = (char)nextToken;
     var size = sr.ReadNumber(buf, 1) + 1;
     nextToken = sr.Read();
     try
     {
         return ConvertToDecimal(buf, size, sr);
     }
     catch (Exception ex)
     {
         throw new SerializationException("Error parsing decimal at " + JsonSerialization.PositionInStream(sr) + ". " + ex.Message, ex);
     }
 }
Esempio n. 4
0
        public static byte[] Parse(BufferedTextReader reader, int context)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            var len = context + (context << 1);

            if (len == 0)
            {
                len = 1;
            }
            cur = reader.Read(len + 1);
            var list = new List <byte>(1024);

            while (cur != -1 && cur != '\\' && cur != '"')
            {
                list.Add((byte)((CharLookup[cur] << 4) + CharLookup[reader.Read()]));
                cur = reader.Read();
            }
            reader.Read(context);
            return(list.ToArray());
        }
Esempio n. 5
0
        public static double DeserializeDouble(BufferedTextReader sr, ref int nextToken)
        {
            if (nextToken == '"')
            {
                sr.InitBuffer();
                sr.FillUntil('"');
                nextToken = sr.Read(2);
                try
                {
                    return(sr.BufferToValue(ConvertToDouble));
                }
                catch (Exception ex)
                {
                    throw new SerializationException("Error parsing double at " + JsonSerialization.PositionInStream(sr) + ". " + ex.Message, ex);
                }
            }
            var buf = sr.SmallBuffer;

            buf[0] = (char)nextToken;
            var size = sr.ReadNumber(buf, 1) + 1;

            nextToken = sr.Read();
            try
            {
                return(ConvertToDouble(buf, size));
            }
            catch (Exception ex)
            {
                throw new SerializationException("Error parsing double at " + JsonSerialization.PositionInStream(sr) + ". " + ex.Message, ex);
            }
        }
Esempio n. 6
0
        public static DateTimeOffset DeserializeOffset(BufferedTextReader sr, int nextToken)
        {
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
            }
            int i      = 0;
            var buffer = sr.SmallBuffer;

            nextToken = sr.Read();
            for (; i < buffer.Length && nextToken != '"'; i++, nextToken = sr.Read())
            {
                buffer[i] = (char)nextToken;
            }
            try
            {
                if (i > 0 && buffer[i - 1] == 'Z')
                {
                    return(DateTimeOffset.Parse(new string(buffer, 0, i), Invariant, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal));
                }
                return(DateTimeOffset.Parse(new string(buffer, 0, i), Invariant));
            }
            catch (Exception ex)
            {
                throw new SerializationException("Error parsing timestamp at " + JsonSerialization.PositionInStream(sr) + ". " + ex.Message, ex);
            }
        }
Esempio n. 7
0
        public static IPAddress DeserializeIP(BufferedTextReader sr, int nextToken)
        {
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
            }
            nextToken = sr.Read();
            var buffer = sr.SmallBuffer;
            int i      = 0;

            for (; nextToken != '"' && i < buffer.Length; i++, nextToken = sr.Read())
            {
                buffer[i] = (char)nextToken;
            }
            if (nextToken == '"')
            {
                try
                {
                    return(IPAddress.Parse(new string(buffer, 0, i)));
                }
                catch (Exception ex)
                {
                    throw new SerializationException("Error parsing IP address at " + JsonSerialization.PositionInStream(sr) + ". " + ex.Message, ex);
                }
            }
            throw new SerializationException("Invalid value found at position " + JsonSerialization.PositionInStream(sr) + " for ip value. Expecting \"");
        }
Esempio n. 8
0
		private static decimal ParseDecimal(BufferedTextReader reader, ref int cur, char matchEnd)
		{
			var neg = cur == '-';
			if (neg)
				cur = reader.Read();
			var buf = reader.SmallBuffer;
			buf[0] = (char)cur;
			var size = reader.ReadUntil(buf, 1, ',', matchEnd) + 1;
			cur = reader.Read();
			if (cur >= '0' && cur <= '9' || cur == '.')
				throw new FrameworkException("Too long decimal number: " + new string(buf, 0, size));
			if (size > 18)
			{
				if (neg)
					return -decimal.Parse(new string(buf, 0, size), Invariant);
				return decimal.Parse(new string(buf, 0, size), Invariant);
			}
			long value = 0;
			int scale = 0;
			char ch;
			for (int i = 0; i < size && i < buf.Length; i++)
			{
				ch = buf[i];
				if (ch == '.')
					scale = size - i - 1;
				else
					value = (value << 3) + (value << 1) + ch - 48;
			}
			return new decimal((int)value, (int)(value >> 32), 0, neg, (byte)scale);
		}
Esempio n. 9
0
        public static int CalcHash(BufferedTextReader sr, int nextToken)
        {
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + PositionInStream(sr) + ". Found " + (char)nextToken);
            }
            nextToken = sr.Read();
            char c      = (char)nextToken;
            var  buffer = sr.SmallBuffer;
            int  i      = 0;
            var  hash   = 0x811C9DC5;

            for (; i < buffer.Length && c != '"'; i++, c = (char)sr.Read())
            {
                buffer[i] = c;
                hash      = (hash ^ c) * 0x1000193;
            }
            nextToken = c;
            if (i < buffer.Length)
            {
                buffer[i] = '\0';
            }
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + PositionInStream(sr) + ". Found " + (char)nextToken);
            }
            return((int)hash);
        }
Esempio n. 10
0
		public static bool Parse(BufferedTextReader reader)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return false;
			reader.Read();
			return cur == 't';
		}
Esempio n. 11
0
		public static bool? ParseNullable(BufferedTextReader reader)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			reader.Read();
			return cur == 't';
		}
Esempio n. 12
0
 public static DateTime Parse(BufferedTextReader reader, int context)
 {
     var cur = reader.Read();
     if (cur == ',' || cur == ')')
         return DateTime.MinValue;
     var dt = ParseTimestampUtc(reader, context);
     reader.Read();
     return dt.ToLocalTime();
 }
Esempio n. 13
0
		public static DateTime? ParseNullable(BufferedTextReader reader)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			var res = ParseDate(reader, cur);
			reader.Read();
			return res;
		}
Esempio n. 14
0
		public static S3 Parse(BufferedTextReader reader, int context)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			var s3 = ParseS3(reader, context, context == 0 ? 1 : context << 1, null);
			reader.Read();
			return s3;
		}
Esempio n. 15
0
		public static DateTime Parse(BufferedTextReader reader)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return DateTime.MinValue;
			var res = ParseDate(reader, cur);
			reader.Read();
			return res;
		}
Esempio n. 16
0
		public static XElement DeserializeNullable(BufferedTextReader sr, ref int nextToken)
		{
			if (nextToken == 'n')
			{
				if (sr.Read() == 'u' && sr.Read() == 'l' && sr.Read() == 'l')
					return null;
				throw new SerializationException("Invalid null value found at " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
			}
			return Deserialize(sr, ref nextToken);
		}
Esempio n. 17
0
        public static int GetNextToken(BufferedTextReader sr)
        {
            int c = sr.Read();

            while (IsWhiteSpace(c))
            {
                c = sr.Read();
            }
            return(c);
        }
Esempio n. 18
0
 public static DateTime DeserializeDate(BufferedTextReader sr, int nextToken)
 {
     if (nextToken != '"') throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
     nextToken = sr.Read();
     int year = 0;
     //TODO: 6!?
     for (int i = 0; i < 6 && (nextToken != '-'); i++, nextToken = sr.Read())
         year = year * 10 + (nextToken - '0');
     nextToken = sr.Read();
     int month = nextToken - 48;
     nextToken = sr.Read();
     if (nextToken != '-')
     {
         month = month * 10 + (nextToken - '0');
         if ((nextToken = sr.Read()) != '-') throw new SerializationException("Expecting '-' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
     }
     nextToken = sr.Read();
     int day = nextToken - 48;
     nextToken = sr.Read();
     if (nextToken != '"' && nextToken != ' ' && nextToken != 'T')
     {
         day = day * 10 + (nextToken - '0');
         nextToken = sr.Read();
     }
     for (int i = 0; i < 24 && nextToken != '"'; i++)
         nextToken = sr.Read();
     if (nextToken != '"') throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
     return new DateTime(year, month, day);
 }
Esempio n. 19
0
        public static bool?ParseNullable(BufferedTextReader reader)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            reader.Read();
            return(cur == 't');
        }
Esempio n. 20
0
        public static bool Parse(BufferedTextReader reader)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(false);
            }
            reader.Read();
            return(cur == 't');
        }
Esempio n. 21
0
        private static int MemoizeGetNextToken(BufferedTextReader sr, TextWriter sw)
        {
            int c = sr.Read();

            sw.Write((char)c);
            while (IsWhiteSpace(c))
            {
                c = sr.Read();
                sw.Write((char)c);
            }
            return(c);
        }
Esempio n. 22
0
        private static int SkipString(BufferedTextReader sr)
        {
            var c    = sr.Read();
            var prev = c;

            while ((c != '"' || prev == '\\') && c != -1)
            {
                prev = c;
                c    = sr.Read();
            }
            return(GetNextToken(sr));
        }
Esempio n. 23
0
 public static TreePath?DeserializeNullable(BufferedTextReader sr, int nextToken)
 {
     if (nextToken == 'n')
     {
         if (sr.Read() == 'u' && sr.Read() == 'l' && sr.Read() == 'l')
         {
             return(null);
         }
         throw new SerializationException("Invalid null value found at " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
     }
     return(Deserialize(sr, nextToken));
 }
Esempio n. 24
0
        public static byte[] Deserialize(BufferedTextReader sr, int nextToken)
        {
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
            }
            nextToken = sr.Read();
            if (nextToken == '"')
            {
                return(EmptyBytes);
            }
            var base64 = sr.LargeTempBuffer;
            var res    = new List <byte[]>();
            int total  = 0;
            int i      = 1;

            base64[0] = (char)nextToken;
            int len;

            while ((len = sr.ReadUntil(base64, i, '"')) > 0)
            {
                i += len;
                if (i == base64.Length)
                {
                    var bytes = Convert.FromBase64CharArray(base64, 0, base64.Length);
                    res.Add(bytes);
                    i      = 0;
                    total += bytes.Length;
                }
            }
            nextToken = sr.Read();
            if (i > 0)
            {
                var bytes = Convert.FromBase64CharArray(base64, 0, i);
                res.Add(bytes);
                total += bytes.Length;
            }
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found end of stream.");
            }
            var result = new byte[total];
            var cur    = 0;

            for (i = 0; i < res.Count; i++)
            {
                var item = res[i];
                Array.Copy(item, 0, result, cur, item.Length);
                cur += item.Length;
            }
            return(result);
        }
Esempio n. 25
0
        public static DateTime?ParseNullable(BufferedTextReader reader, int context)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            var dt = ParseTimestampUtc(reader, context);

            reader.Read();
            return(dt.ToLocalTime());
        }
Esempio n. 26
0
        public static DateTime ParseUtc(BufferedTextReader reader, int context)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(MinUtc);
            }
            var dt = ParseTimestampUtc(reader, context);

            reader.Read();
            return(dt);
        }
Esempio n. 27
0
        public static S3 Parse(BufferedTextReader reader, int context)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            var s3 = ParseS3(reader, context, context == 0 ? 1 : context << 1, null);

            reader.Read();
            return(s3);
        }
Esempio n. 28
0
        public static DateTime?ParseNullable(BufferedTextReader reader)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            var res = ParseDate(reader, cur);

            reader.Read();
            return(res);
        }
Esempio n. 29
0
        public static DateTime Parse(BufferedTextReader reader)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(DateTime.MinValue);
            }
            var res = ParseDate(reader, cur);

            reader.Read();
            return(res);
        }
Esempio n. 30
0
        private static Guid ParseCollectionGuid(BufferedTextReader reader, int cur)
        {
            var buf = reader.SmallBuffer;

            buf[0] = (char)cur;
            int read = reader.Read(buf, 1, 35);

            for (int i = read + 1; i < 36; i++)
            {
                buf[i] = (char)reader.Read();
            }
            return(ParseGuid36(buf));
        }
Esempio n. 31
0
        private static Guid ParseGuid(BufferedTextReader reader, int cur)
        {
            var buf = reader.SmallBuffer;

            buf[0] = (char)cur;
            int read = reader.Read(buf, 1, 36);

            for (int i = read + 1; i < 37 && i < buf.Length; i++)
            {
                buf[i] = (char)reader.Read();
            }
            return(ParseGuid36(buf));
        }
Esempio n. 32
0
		public static void DeserializeColorNullableCollection(BufferedTextReader sr, int nextToken, ICollection<Color?> res)
		{
			if (nextToken == 'n')
			{
				if (sr.Read() == 'u' && sr.Read() == 'l' && sr.Read() == 'l')
					res.Add(null);
				else throw new SerializationException("Invalid value found at position " + JsonSerialization.PositionInStream(sr) + " for Color value. Expecting number, string or null");
				nextToken = sr.Read();
			}
			else res.Add(DeserializeColor(sr, ref nextToken));
			while ((nextToken = JsonSerialization.MoveToNextToken(sr, nextToken)) == ',')
			{
				nextToken = JsonSerialization.GetNextToken(sr);
				if (nextToken == 'n')
				{
					if (sr.Read() == 'u' && sr.Read() == 'l' && sr.Read() == 'l')
						res.Add(null);
					else throw new SerializationException("Invalid value found at position " + JsonSerialization.PositionInStream(sr) + " for Color value. Expecting number, string or null");
					nextToken = sr.Read();
				}
				else res.Add(DeserializeColor(sr, ref nextToken));
			}
			if (nextToken != ']')
			{
				if (nextToken == -1) throw new SerializationException("Unexpected end of json in collection.");
				else throw new SerializationException("Expecting ']' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
			}
		}
Esempio n. 33
0
		private static S3 ParseS3(BufferedTextReader reader, int context, int innerContext, IServiceProvider locator)
		{
			for (int i = 0; i < context; i++)
				reader.Read();
			var bucket = StringConverter.Parse(reader, innerContext);
			var key = StringConverter.Parse(reader, innerContext);
			var length = LongConverter.Parse(reader);
			var name = StringConverter.Parse(reader, innerContext);
			var mimeType = StringConverter.Parse(reader, innerContext);
			var metadata = HstoreConverter.Parse(reader, innerContext);
			for (int i = 0; i < context; i++)
				reader.Read();
			return new S3 { Bucket = bucket, Key = key, Length = length, Name = name, MimeType = mimeType, Metadata = metadata };
		}
Esempio n. 34
0
		private static DateTime ParseDate(BufferedTextReader reader, int cur)
		{
			//TODO: BC after date for year < 0 ... not supported by .NET
			if (cur == '\\' || cur == '"')
				throw new NotSupportedException("Negative dates are not supported by .NET.");
			var buf = reader.SmallBuffer;
			buf[0] = (char)cur;
			var read = reader.Read(buf, 1, 9);
			for (int i = read + 1; i < 10; i++)
				buf[i] = (char)reader.Read();
			if (buf[4] != '-')
				return ParseDateSlow(buf, reader);
			return new DateTime(NumberConverter.Read4(buf, 0), NumberConverter.Read2(buf, 5), NumberConverter.Read2(buf, 8));
		}
Esempio n. 35
0
        public static List <DateTime> ParseCollectionUtc(BufferedTextReader reader, int context)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            var escaped = cur != '{';

            if (escaped)
            {
                reader.Read(context);
            }
            int innerContext = context == 0 ? 1 : context << 1;

            cur = reader.Peek();
            if (cur == '}')
            {
                if (escaped)
                {
                    reader.Read(context + 2);
                }
                else
                {
                    reader.Read(2);
                }
                return(new List <DateTime>(0));
            }
            var list = new List <DateTime>();

            do
            {
                cur = reader.Read();
                if (cur == 'N')
                {
                    cur = reader.Read(4);
                    list.Add(MinUtc);
                }
                else
                {
                    list.Add(ParseTimestampUtc(reader, innerContext));
                    cur = reader.Read();
                }
            } while (cur == ',');
            if (escaped)
            {
                reader.Read(context + 1);
            }
            else
            {
                reader.Read();
            }
            return(list);
        }
Esempio n. 36
0
		public static List<bool?> ParseNullableCollection(BufferedTextReader reader, int context)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			var espaced = cur != '{';
			if (espaced)
				reader.Read(context);
			var list = new List<bool?>();
			cur = reader.Peek();
			if (cur == '}')
				reader.Read();
			while (cur != -1 && cur != '}')
			{
				cur = reader.Read();
				if (cur == 't')
					list.Add(true);
				else if (cur == 'f')
					list.Add(false);
				else
				{
					reader.Read(3);
					list.Add(null);
				}
				cur = reader.Read();
			}
			if (espaced)
				reader.Read(context + 1);
			else
				reader.Read();
			return list;
		}
Esempio n. 37
0
 public static string Parse(BufferedTextReader reader, int context)
 {
     var cur = reader.Read();
     if (cur == ',' || cur == ')')
         return null;
     if (cur != '"' && cur != '\\')
     {
         reader.InitBuffer((char)cur);
         reader.FillUntil(',', ')');
         reader.Read();
         return reader.BufferToString();
     }
     return ParseEscapedString(reader, context, ref cur, ')');
 }
Esempio n. 38
0
        public static string Deserialize(BufferedTextReader sr, int nextToken)
        {
            if (nextToken != '"')
            {
                throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
            }
            sr.InitBuffer();
            nextToken = sr.FillUntil('"', '\\');
            if (nextToken == '"')
            {
                sr.Read();
                return(sr.BufferToString());
            }
            var tmp = sr.SmallBuffer;

            do
            {
                nextToken = sr.Read(2);
                switch (nextToken)
                {
                case 'b': sr.AddToBuffer('\b'); break;

                case 't': sr.AddToBuffer('\t'); break;

                case 'r': sr.AddToBuffer('\r'); break;

                case 'n': sr.AddToBuffer('\n'); break;

                case 'f': sr.AddToBuffer('\f'); break;

                case 'u':
                    var len = sr.Read(tmp, 0, 4);
                    if (len < 4)
                    {
                        sr.Read(tmp, len, 4 - len);                                     //the second one must succeed
                    }
                    sr.AddToBuffer((char)Convert.ToInt32(new string(tmp, 0, 4), 16));   //TODO: optimize to no allocation
                    break;

                default:
                    sr.AddToBuffer((char)nextToken);
                    break;
                }
                nextToken = sr.FillUntil('"', '\\');
            } while (nextToken == '\\');
            sr.Read();
            return(sr.BufferToString());
        }
Esempio n. 39
0
        public static List <double> ParseCollection(BufferedTextReader reader, int context)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            var espaced = cur != '{';

            if (espaced)
            {
                reader.Read(context);
            }
            var list = new List <double>();

            cur = reader.Peek();
            if (cur == '}')
            {
                reader.Read();
            }
            while (cur != -1 && cur != '}')
            {
                cur = reader.Read();
                if (cur == 'N')
                {
                    cur = reader.Read();
                    if (cur == 'U')
                    {
                        cur = reader.Read(3);
                        list.Add(0);
                    }
                    else
                    {
                        list.Add(double.NaN);
                        cur = reader.Read(2);
                    }
                }
                else
                {
                    list.Add(ParseDouble(reader, ref cur, '}'));
                }
            }
            if (espaced)
            {
                reader.Read(context + 1);
            }
            else
            {
                reader.Read();
            }
            return(list);
        }
Esempio n. 40
0
        public static List <Guid> ParseCollection(BufferedTextReader reader, int context)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            var espaced = cur != '{';

            if (espaced)
            {
                reader.Read(context);
            }
            cur = reader.Peek();
            if (cur == '}')
            {
                if (espaced)
                {
                    reader.Read(context + 2);
                }
                else
                {
                    reader.Read(2);
                }
                return(new List <Guid>(0));
            }
            var list = new List <Guid>();

            do
            {
                cur = reader.Read();
                if (cur == 'N')
                {
                    cur = reader.Read(4);
                    list.Add(Guid.Empty);
                }
                else
                {
                    list.Add(ParseCollectionGuid(reader, cur));
                    cur = reader.Read();
                }
            } while (cur == ',');
            if (espaced)
            {
                reader.Read(context + 1);
            }
            else
            {
                reader.Read();
            }
            return(list);
        }
Esempio n. 41
0
		public static float Parse(BufferedTextReader reader)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return 0;
			return ParseFloat(reader, ref  cur, ')');
		}
Esempio n. 42
0
        private static DateTime ParseDateSlow(char[] buf, BufferedTextReader reader)
        {
            int foundAt = 4;

            for (; foundAt < buf.Length; foundAt++)
            {
                if (buf[foundAt] == '-')
                {
                    break;
                }
            }
            if (foundAt == buf.Length)
            {
                throw new NotSupportedException("Invalid date value.");
            }
            var year   = IntConverter.ParsePositive(buf, 0, foundAt);
            var newBuf = reader.CharBuffer;

            for (int i = foundAt + 1; i < buf.Length; i++)
            {
                newBuf[i - foundAt - 1] = buf[i];
            }
            for (int i = buf.Length - foundAt - 1; i < 5; i++)
            {
                newBuf[i] = (char)reader.Read();
            }
            return(new DateTime(year, NumberConverter.Read2(newBuf, 0), NumberConverter.Read2(newBuf, 3)));
        }
Esempio n. 43
0
		public static double Parse(BufferedTextReader reader)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return 0;
			return ParseDouble(reader, ref cur, ')');
		}
Esempio n. 44
0
		public static long? ParseNullable(BufferedTextReader reader)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			return ParseLong(reader, ref cur);
		}
Esempio n. 45
0
		public static List<long> ParseCollection(BufferedTextReader reader, int context)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			var espaced = cur != '{';
			if (espaced)
				reader.Read(context);
			var list = new List<long>();
			cur = reader.Peek();
			if (cur == '}')
				reader.Read();
			while (cur != -1 && cur != '}')
			{
				cur = reader.Read();
				if (cur == 'N')
				{
					cur = reader.Read(4);
					list.Add(0);
				}
				else
				{
					list.Add(ParseLong(reader, ref cur));
				}
			}
			if (espaced)
				reader.Read(context + 1);
			else
				reader.Read();
			return list;
		}
Esempio n. 46
0
 public static Dictionary<string, string> Parse(BufferedTextReader reader, int context)
 {
     var cur = reader.Read();
     if (cur == ',' || cur == ')')
         return null;
     return ParseDictionary(reader, context, context > 0 ? context << 1 : 1, ref cur, ')');
 }
Esempio n. 47
0
		public static int? ParseNullable(BufferedTextReader reader)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			return ParseInt(reader, ref cur, ')');
		}
Esempio n. 48
0
 public static TreePath Deserialize(BufferedTextReader sr, int nextToken)
 {
     if (nextToken != '"') throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
     sr.InitBuffer();
     nextToken = sr.FillUntil('"');
     sr.Read();
     return TreePath.Create(sr.BufferToString());
 }
Esempio n. 49
0
 private static double ParseDouble(BufferedTextReader reader, ref int cur, char matchEnd)
 {
     reader.InitBuffer((char)cur);
     reader.FillUntil(',', matchEnd);
     cur = reader.Read();
     //TODO: optimize
     return(double.Parse(reader.BufferToString(), NumberStyles.Float, CultureInfo.InvariantCulture));
 }
Esempio n. 50
0
		private static double ParseDouble(BufferedTextReader reader, ref int cur, char matchEnd)
		{
			reader.InitBuffer((char)cur);
			reader.FillUntil(',', matchEnd);
			cur = reader.Read();
			//TODO: optimize
			return double.Parse(reader.BufferToString(), NumberStyles.Float, CultureInfo.InvariantCulture);
		}
Esempio n. 51
0
        public static string Parse(BufferedTextReader reader, int context)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(null);
            }
            if (cur != '"' && cur != '\\')
            {
                reader.InitBuffer((char)cur);
                reader.FillUntil(',', ')');
                reader.Read();
                return(reader.BufferToString());
            }
            return(ParseEscapedString(reader, context, ref cur, ')'));
        }
Esempio n. 52
0
 public static List<Dictionary<string, string>> ParseCollection(BufferedTextReader reader, int context, bool allowNulls)
 {
     var cur = reader.Read();
     if (cur == ',' || cur == ')')
         return null;
     var espaced = cur != '{';
     if (espaced)
         reader.Read(context);
     var innerContext = context << 1;
     var list = new List<Dictionary<string, string>>();
     cur = reader.Peek();
     if (cur == '}')
         reader.Read();
     while (cur != -1 && cur != '}')
     {
         cur = reader.Read();
         if (cur == 'N')
         {
             cur = reader.Read(4);
             list.Add(allowNulls ? null : new Dictionary<string, string>());
         }
         else
         {
             list.Add(ParseDictionary(reader, innerContext, innerContext << 1, ref cur, '}'));
         }
     }
     if (espaced)
         reader.Read(context + 1);
     else
         reader.Read();
     return list;
 }
Esempio n. 53
0
        private static int MemoizeSkipString(BufferedTextReader sr, TextWriter sw)
        {
            var c = sr.Read();

            sw.Write((char)c);
            while (c != '"' && c != -1)
            {
                c = sr.Read();
                sw.Write((char)c);
                if (c == '\\')
                {
                    c = sr.Read();
                    sw.Write((char)c);
                    c = (char)0;
                }
            }
            return(MemoizeGetNextToken(sr, sw));
        }
Esempio n. 54
0
		public static DateTime? ParseNullable(BufferedTextReader reader, int context)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			var dt = ParseTimestampUtc(reader, context);
			reader.Read();
			return dt.ToLocalTime();
		}
Esempio n. 55
0
		public static byte[] Parse(BufferedTextReader reader, int context)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			var len = context + (context << 1);
			if (len == 0)
				len = 1;
			cur = reader.Read(len + 1);
			var list = new List<byte>(1024);
			while (cur != -1 && cur != '\\' && cur != '"')
			{
				list.Add((byte)((CharLookup[cur] << 4) + CharLookup[reader.Read()]));
				cur = reader.Read();
			}
			reader.Read(context);
			return list.ToArray();
		}
Esempio n. 56
0
        private static decimal ParseDecimal(BufferedTextReader reader, ref int cur, char matchEnd)
        {
            var neg = cur == '-';

            if (neg)
            {
                cur = reader.Read();
            }
            var buf = reader.SmallBuffer;

            buf[0] = (char)cur;
            var size = reader.ReadUntil(buf, 1, ',', matchEnd) + 1;

            cur = reader.Read();
            if (cur >= '0' && cur <= '9' || cur == '.')
            {
                throw new FrameworkException("Too long decimal number: " + new string(buf, 0, size));
            }
            if (size > 18)
            {
                if (neg)
                {
                    return(-decimal.Parse(new string(buf, 0, size), Invariant));
                }
                return(decimal.Parse(new string(buf, 0, size), Invariant));
            }
            long value = 0;
            int  scale = 0;
            char ch;

            for (int i = 0; i < size && i < buf.Length; i++)
            {
                ch = buf[i];
                if (ch == '.')
                {
                    scale = size - i - 1;
                }
                else
                {
                    value = (value << 3) + (value << 1) + ch - 48;
                }
            }
            return(new decimal((int)value, (int)(value >> 32), 0, neg, (byte)scale));
        }
Esempio n. 57
0
        public static Guid Parse(BufferedTextReader reader)
        {
            var cur = reader.Read();

            if (cur == ',' || cur == ')')
            {
                return(Guid.Empty);
            }
            return(ParseGuid(reader, cur));
        }
Esempio n. 58
0
		private static string ParseEscapedString(BufferedTextReader reader, int context, ref int cur, char matchEnd)
		{
			cur = reader.Read(context);
			reader.InitBuffer();
			do
			{
				if (cur == '\\' || cur == '"')
				{
					cur = reader.Read(context);
					if (cur == ',' || cur == matchEnd)
						return reader.BufferToString();
					for (int i = 0; i < context - 1; i++)
						cur = reader.Read();
				}
				reader.AddToBuffer((char)cur);
				reader.FillUntil('\\', '"');
				cur = reader.Read();
			} while (cur != -1);
			throw new FrameworkException("Unable to find end of string");
		}
Esempio n. 59
0
		public static IPAddress DeserializeIP(BufferedTextReader sr, int nextToken)
		{
			if (nextToken != '"') throw new SerializationException("Expecting '\"' at position " + JsonSerialization.PositionInStream(sr) + ". Found " + (char)nextToken);
			nextToken = sr.Read();
			var buffer = sr.SmallBuffer;
			int i = 0;
			for (; nextToken != '"' && i < buffer.Length; i++, nextToken = sr.Read())
				buffer[i] = (char)nextToken;
			if (nextToken == '"')
			{
				try
				{
					return IPAddress.Parse(new string(buffer, 0, i));
				}
				catch (Exception ex)
				{
					throw new SerializationException("Error parsing IP address at " + JsonSerialization.PositionInStream(sr) + ". " + ex.Message, ex);
				}
			}
			throw new SerializationException("Invalid value found at position " + JsonSerialization.PositionInStream(sr) + " for ip value. Expecting \"");
		}
Esempio n. 60
0
		public static List<decimal?> ParseNullableCollection(BufferedTextReader reader, int context)
		{
			var cur = reader.Read();
			if (cur == ',' || cur == ')')
				return null;
			var espaced = cur != '{';
			if (espaced)
				reader.Read(context);
			cur = reader.Peek();
			if (cur == '}')
			{
				if (espaced)
					reader.Read(context + 2);
				else
					reader.Read(2);
				return new List<decimal?>(0);
			}
			var list = new List<decimal?>();
			do
			{
				cur = reader.Read();
				if (cur == 'N')
				{
					list.Add(null);
					cur = reader.Read(4);
				}
				else list.Add(ParseDecimal(reader, ref cur, '}'));
			} while (cur == ',');
			if (espaced)
				reader.Read(context + 1);
			else
				reader.Read();
			return list;
		}