예제 #1
0
 [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);
             }
         }
     }
 }
예제 #2
0
        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);
                    }
                }
            }
        }
예제 #3
0
 [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);
                 }
             }
         }
     }
 }
예제 #4
0
 [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);
 }
예제 #5
0
 [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);
             }
         }
     }
 }
예제 #6
0
        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);
                    }
                }
            }
        }
예제 #7
0
        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.");
        }
예제 #8
0
        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);
        }
예제 #9
0
 public bool TryFormat(Span <byte> buffer, Format.Parsed format, EncodingData formattingData, out int written)
 {
     return(_name.TryFormatQuotedString(buffer, format, formattingData, out written));
 }