aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Texture/Astc/IntegerSequence.cs
blob: 367b68095e92e073af6981d39894a7f69387a5b8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

namespace Ryujinx.Graphics.Texture.Astc
{
    [StructLayout(LayoutKind.Sequential, Size = IntegerEncoded.StructSize * Capacity + sizeof(int))]
    internal struct IntegerSequence
    {
        private const int Capacity = 100;

        private int _length;
        private IntegerEncoded _start;

        public Span<IntegerEncoded> List => MemoryMarshal.CreateSpan(ref _start, _length);

        public void Reset() => _length = 0;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void Add(ref IntegerEncoded item)
        {
            Debug.Assert(_length < Capacity);

            int oldLength = _length;
            _length++;

            List[oldLength] = item;
        }
    }
}