예제 #1
0
        /// <summary>
        /// Returns a reference to specified element of the span.
        /// </summary>
        /// <param name="index">The index</param>
        /// <returns>The reference to the specified element</returns>
        public ref T this[int index]
        {
            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            get
            {
                DebugGuard.MustBeLessThan(index, this.Length, nameof(index));

                byte *ptr = (byte *)this.PointerAtOffset + BufferSpan.SizeOf <T>(index);
                return(ref Unsafe.AsRef <T>(ptr));
            }
        }
예제 #2
0
        public BufferSpan <T> Slice(int start)
        {
            DebugGuard.MustBeLessThan(start, this.Length, nameof(start));

            BufferSpan <T> result = default(BufferSpan <T>);

            result.Array           = this.Array;
            result.Start           = this.Start + start;
            result.PointerAtOffset = this.PointerAtOffset + (Unsafe.SizeOf <T>() * start);
            result.Length          = this.Length - start;
            return(result);
        }
예제 #3
0
        public static ref Rgb24 GetRgb24(this Span <byte> bytes, int offset)
        {
            DebugGuard.MustBeLessThan(offset + 2, bytes.Length, nameof(offset));

            return(ref Unsafe.As <byte, Rgb24>(ref bytes[offset]));
        }