| File: Util\TokenTrieEvaluator.cs | Web Access |
| Project: src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Core\Microsoft.TemplateEngine.Core.csproj (Microsoft.TemplateEngine.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.TemplateEngine.Core.Contracts; using Microsoft.TemplateEngine.Core.Matching; namespace Microsoft.TemplateEngine.Core.Util { public class TokenTrieEvaluator : TrieEvaluator<Token>, ITokenTrieEvaluator { private int _currentSequenceNumber; public TokenTrieEvaluator(Trie<Token> trie) : base(trie) { } public int BytesToKeepInBuffer => _currentSequenceNumber - OldestRequiredSequenceNumber + 1; public bool Accept(byte data, ref int bufferPosition, out int token) { ++_currentSequenceNumber; if (Accept(data, ref _currentSequenceNumber, out TerminalLocation<Token>? terminal)) { token = terminal!.Terminal.Index; bufferPosition += _currentSequenceNumber - terminal.Location - terminal.Terminal.End; return true; } token = -1; return false; } public bool TryFinalizeMatchesInProgress(ref int bufferPosition, out int token) { FinalizeMatchesInProgress(ref _currentSequenceNumber, out TerminalLocation<Token>? terminal); if (terminal != null) { token = terminal.Terminal.Index; bufferPosition += _currentSequenceNumber - terminal.Location - terminal.Terminal.End; return true; } token = -1; return false; } } }