Esempio n. 1
0
        public static void Do <T>(this ISpanSequence <T> buffer, ActionOfSpan <T> action)
        {
            Span <T> flat;

            if (buffer.Count < 2)
            {
                flat = buffer.Flatten();
            }
            if (buffer.TotalLength < 128)
            {
                unsafe
                {
                    var stackArray = stackalloc byte[128];
                    flat = new Span <T>(stackArray, 128);
                    if (!buffer.TryCopyTo(ref flat, 0))
                    {
                        throw new Exception(nameof(buffer) + ".TotalLength returned bad value.");
                    }
                }
            }
            else
            {
                flat = buffer.Flatten();
            }

            action(flat);
        }