// 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]; } } |