[InlineData("-2147483648")] // min value private static void Utf8CultureByteArrayToInt(string text) { byte[] utf8ByteArray = UtfEncode(text); FormattingData fd = FormattingData.InvariantUtf8; Format.Parsed nf = new Format.Parsed('N'); foreach (var iteration in Benchmark.Iterations) { int value; int bytesConsumed; using (iteration.StartMeasurement()) { for (int i = 0; i < LOAD_ITERATIONS; i++) { InvariantParser.TryParse(utf8ByteArray, 0, fd, nf, out value, out bytesConsumed); } } } }
private static void ByteArrayArbitraryLengthBufferToUlong(string text) { byte[] utf8ByteArray = UtfEncode(text); FormattingData fd = FormattingData.InvariantUtf8; Format.Parsed nf = new Format.Parsed('N'); int start = text.IndexOf('2'); foreach (var iteration in Benchmark.Iterations) { ulong value; int bytesConsumed; using (iteration.StartMeasurement()) { for (int i = 0; i < LOAD_ITERATIONS; i++) { InvariantParser.TryParse(utf8ByteArray, start, fd, nf, out value, out bytesConsumed); } } } }
[InlineData("0")] // min value private unsafe static void ByteStarToUlong(string text) { int length = text.Length; byte[] utf8ByteArray = UtfEncode(text); FormattingData fd = FormattingData.InvariantUtf8; Format.Parsed nf = new Format.Parsed('N'); foreach (var iteration in Benchmark.Iterations) { ulong value; int bytesConsumed; fixed (byte* utf8ByteStar = utf8ByteArray) { using (iteration.StartMeasurement()) { for (int i = 0; i < LOAD_ITERATIONS; i++) { InvariantParser.TryParse(utf8ByteStar, 0, length, fd, nf, out value, out bytesConsumed); } } } } }
[InlineData("0")] // min value private unsafe static void ByteStarUnmanagedToUlong(string text) { int length = text.Length; byte[] utf8ByteArray = UtfEncode(text); FormattingData fd = FormattingData.InvariantUtf8; Format.Parsed nf = new Format.Parsed('N'); byte* unmanagedBytePtr; unmanagedBytePtr = (byte*)Marshal.AllocHGlobal(utf8ByteArray.Length); Marshal.Copy(utf8ByteArray, 0, (IntPtr)unmanagedBytePtr, utf8ByteArray.Length); foreach (var iteration in Benchmark.Iterations) { ulong value; int bytesConsumed; using (iteration.StartMeasurement()) { for (int i = 0; i < LOAD_ITERATIONS; i++) { InvariantParser.TryParse(unmanagedBytePtr, 0, length, fd, nf, out value, out bytesConsumed); } } } Marshal.FreeHGlobal((IntPtr)unmanagedBytePtr); }
[InlineData("0")] // min value private static void ByteArrayToUlong(string text) { byte[] utf8ByteArray = UtfEncode(text); EncodingData fd = EncodingData.InvariantUtf8; Format.Parsed nf = new Format.Parsed('N'); ulong value; foreach (var iteration in Benchmark.Iterations) { int bytesConsumed; using (iteration.StartMeasurement()) { for (int i = 0; i < LOAD_ITERATIONS; i++) { PrimitiveParser.TryParseUInt64(utf8ByteArray, 0, fd, nf, out value, out bytesConsumed); } } } }
private static void ByteArrayArbitraryLengthToBool(string text) { byte[] utf8ByteArray = UtfEncode(text); int start = text.IndexOf('=') + 1; EncodingData fd = EncodingData.InvariantUtf8; Format.Parsed nf = new Format.Parsed('N'); foreach (var iteration in Benchmark.Iterations) { bool value; int bytesConsumed; using (iteration.StartMeasurement()) { for (int i = 0; i < LOAD_ITERATIONS; i++) { PrimitiveParser.TryParseBoolean(utf8ByteArray, start, fd, nf, out value, out bytesConsumed); } } } }
static void AppendUntyped <TFormatter, T>(this TFormatter formatter, T value, Format.Parsed format) where TFormatter : IFormatter { #region Built in types var i32 = value as int?; if (i32 != null) { formatter.Append(i32.Value, format); return; } var i64 = value as long?; if (i64 != null) { formatter.Append(i64.Value, format); return; } var i16 = value as short?; if (i16 != null) { formatter.Append(i16.Value, format); return; } var b = value as byte?; if (b != null) { formatter.Append(b.Value, format); return; } var c = value as char?; if (c != null) { formatter.Append(c.Value, format); return; } var u32 = value as uint?; if (u32 != null) { formatter.Append(u32.Value, format); return; } var u64 = value as ulong?; if (u64 != null) { formatter.Append(u64.Value, format); return; } var u16 = value as ushort?; if (u16 != null) { formatter.Append(u16.Value, format); return; } var sb = value as sbyte?; if (sb != null) { formatter.Append(sb.Value, format); return; } var str = value as string; if (str != null) { formatter.Append(str, format); return; } var dt = value as DateTime?; if (dt != null) { formatter.Append(dt.Value, format); return; } var ts = value as TimeSpan?; if (ts != null) { formatter.Append(ts.Value, format); return; } #endregion if (value is IBufferFormattable) { formatter.Append((IBufferFormattable)value, format); // this is boxing. not sure how to avoid it. return; } throw new NotSupportedException("value is not formattable."); }
public static bool TryFormatQuotedString(this Utf8String str, Span <byte> buffer, Format.Parsed format, EncodingData formattingData, out int written) { written = 0; int justWritten; if (!'"'.TryFormat(buffer, format, formattingData, out justWritten)) { return(false); } written += justWritten; if (!str.TryFormat(buffer.Slice(written), format, formattingData, out justWritten)) { return(false); } written += justWritten; if (!'"'.TryFormat(buffer.Slice(written), format, formattingData, out justWritten)) { return(false); } written += justWritten; return(true); }
public bool TryFormat(Span <byte> buffer, Format.Parsed format, EncodingData formattingData, out int written) { return(_name.TryFormatQuotedString(buffer, format, formattingData, out written)); }