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))); }
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))); }
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 }); }