File: src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\EmbeddedLanguages\VirtualChars\VirtualCharSequenceSourceText.cs
Web Access
Project: src\src\RoslynAnalyzers\Text.Analyzers\Core\Text.Analyzers.csproj (Text.Analyzers)
// 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.
 
using System.Text;
using Microsoft.CodeAnalysis.Collections;
using Microsoft.CodeAnalysis.Text;
 
namespace Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars;
 
/// <summary>
/// Trivial implementation of a <see cref="SourceText"/> that directly maps over a <see
/// cref="VirtualCharSequence"/>.
/// </summary>
internal sealed class VirtualCharSequenceSourceText : SourceText
{
    private readonly ImmutableSegmentedList<VirtualChar> _virtualChars;
 
    public override Encoding? Encoding { get; }
 
    public VirtualCharSequenceSourceText(ImmutableSegmentedList<VirtualChar> virtualChars, Encoding? encoding)
    {
        _virtualChars = virtualChars;
        Encoding = encoding;
    }
 
    public override int Length => _virtualChars.Count;
 
    public override char this[int position] => _virtualChars[position];
 
    public override void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count)
    {
        for (int i = sourceIndex, n = sourceIndex + count; i < n; i++)
            destination[destinationIndex + i] = this[i];
    }
}