File: src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Formatting\TriviaEngine\TriviaList.cs
Web Access
Project: src\src\RoslynAnalyzers\PerformanceSensitiveAnalyzers\Core\Microsoft.CodeAnalysis.PerformanceSensitiveAnalyzers.csproj (Microsoft.CodeAnalysis.PerformanceSensitiveAnalyzers)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
namespace Microsoft.CodeAnalysis.Formatting;
 
internal readonly struct TriviaList(SyntaxTriviaList list1, SyntaxTriviaList list2)
{
    private readonly SyntaxTriviaList _list1 = list1;
    private readonly SyntaxTriviaList _list2 = list2;
 
    public int Count => _list1.Count + _list2.Count;
 
    public SyntaxTrivia this[int index]
        => index < _list1.Count ? _list1[index] : _list2[index - _list1.Count];
 
    public Enumerator GetEnumerator()
        => new(this);
 
    public struct Enumerator
    {
        private readonly SyntaxTriviaList _list1;
        private readonly SyntaxTriviaList _list2;
 
        private SyntaxTriviaList.Enumerator _enumerator;
        private int _index;
 
        internal Enumerator(TriviaList triviaList)
        {
            _list1 = triviaList._list1;
            _list2 = triviaList._list2;
 
            _index = -1;
            _enumerator = _list1.GetEnumerator();
        }
 
        public bool MoveNext()
        {
            _index++;
            if (_index == _list1.Count)
            {
                _enumerator = _list2.GetEnumerator();
            }
 
            return _enumerator.MoveNext();
        }
 
        public SyntaxTrivia Current => _enumerator.Current;
    }
}