Ejemplo n.º 1
0
        private static DateTime ParseDate(TextReader 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 = new char[10];

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

            if (read != 9)
            {
                for (int i = read + 1; i < 10; i++)
                {
                    buf[i] = (char)reader.Read();
                }
            }
            if (buf[4] != '-')
            {
                return(ParseDateSlow(buf, reader));
            }
            return(new DateTime(IntConverter.ParsePositive(buf, 0, 4), IntConverter.ParsePositive(buf, 5, 7), IntConverter.ParsePositive(buf, 8, 10)));
        }
Ejemplo n.º 2
0
        private static DateTime ParseDateSlow(char[] buf, TextReader 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 = new char[5];

            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, IntConverter.ParsePositive(newBuf, 0, 2), IntConverter.ParsePositive(newBuf, 3, 5)));
        }
Ejemplo n.º 3
0
        private static S3 ParseS3(TextReader reader, int context, int innerContext, IServiceLocator locator)
        {
            for (int i = 0; i < context; i++)
            {
                reader.Read();
            }
            var bucket   = StringConverter.Parse(reader, innerContext);
            var key      = StringConverter.Parse(reader, innerContext);
            var length   = IntConverter.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();
            }
            reader.Read();
            return(new S3 {
                Bucket = bucket, Key = key, Length = length, Name = name, MimeType = mimeType, Metadata = metadata
            });
        }