File: IProcessorState.cs
Web Access
Project: src\src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Core.Contracts\Microsoft.TemplateEngine.Core.Contracts.csproj (Microsoft.TemplateEngine.Core.Contracts)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Text;

namespace Microsoft.TemplateEngine.Core.Contracts
{
    public interface IProcessorState
    {
        IEngineConfig Config { get; }

        /// <summary>
        /// Gets the buffer containing the chunk of source stream that is being processed.
        /// </summary>
        byte[] CurrentBuffer { get; }

        /// <summary>
        /// Gets the length of useful data in <see cref="CurrentBuffer"/>.
        /// </summary>
        int CurrentBufferLength { get; }

        /// <summary>
        /// Gets the current position in <see cref="CurrentBuffer"/>.
        /// </summary>
        int CurrentBufferPosition { get; }

        /// <summary>
        /// Gets the current position in source stream.
        /// </summary>
        int CurrentSequenceNumber { get; }

        IEncodingConfig EncodingConfig { get; }

        Encoding Encoding { get; }

        /// <summary>
        /// Advances source stream to position <paramref name="bufferPosition"/>.
        /// </summary>
        bool AdvanceBuffer(int bufferPosition);

        /// <summary>
        /// Seeks source stream until <paramref name="match"/> is found.
        /// </summary>
        /// <param name="match">The token to find.</param>
        /// <param name="bufferLength">The length of the buffer after the token is found.</param>
        /// <param name="currentBufferPosition">The position in the buffer after the token is found.</param>
        /// <param name="consumeToken">True if token should be sought through.</param>
        void SeekSourceForwardUntil(ITokenTrie match, ref int bufferLength, ref int currentBufferPosition, bool consumeToken = false);

        /// <summary>
        /// Seeks source stream while <paramref name="match"/> is found.
        /// </summary>
        void SeekSourceForwardWhile(ITokenTrie match, ref int bufferLength, ref int currentBufferPosition);

        /// <summary>
        /// Seeks target stream backwards until <paramref name="match"/> is found.
        /// </summary>
        /// <param name="match">The token to find.</param>
        /// <param name="consumeToken">True if token should be sought through.</param>
        void SeekTargetBackUntil(ITokenTrie match, bool consumeToken = false);

        /// <summary>
        /// Seeks target stream backwards while <paramref name="match"/> is found.
        /// </summary>
        void SeekTargetBackWhile(ITokenTrie match);

        /// <summary>
        /// Writes <paramref name="buffer"/> to target stream.
        /// </summary>
        /// <param name="buffer">The buffer to write.</param>
        /// <param name="offset">The start position in the buffer to write.</param>
        /// <param name="count">The count of bytes to write.</param>
        void WriteToTarget(byte[] buffer, int offset, int count);

        void Inject(Stream staged);
    }
}