private byte Align(BitWidth width)
        {
            var byteWidth = 1UL << (int)width;

            _offset += BitWidthUtil.PaddingSize(_offset, byteWidth);
            return((byte)byteWidth);
        }
        public BitWidth ElementWidth(ulong size, int index)
        {
            if (TypesUtil.IsInline(ValueType))
            {
                return(Width);
            }

            for (var i = 0; i < 4; i++)
            {
                var width     = (ulong)1 << i;
                var offsetLoc = size + BitWidthUtil.PaddingSize(size, width) + (ulong)index * width;
                var offset    = offsetLoc - UValue;
                var bitWidth  = BitWidthUtil.Width(offset);
                if ((1UL << (byte)bitWidth) == width)
                {
                    return(bitWidth);
                }
            }
            throw new Exception($"Element with size: {size} and index: {index} is of unknown width");
        }