| File: ApacheModRewrite\ConditionEvaluator.cs | Web Access |
| Project: src\aspnetcore\src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj (Microsoft.AspNetCore.Rewrite) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; namespace Microsoft.AspNetCore.Rewrite.ApacheModRewrite; internal static class ConditionEvaluator { public static MatchResults Evaluate(IEnumerable<Condition> conditions, RewriteContext context, BackReferenceCollection? backReferences) { return Evaluate(conditions, context, backReferences, trackAllCaptures: false); } public static MatchResults Evaluate(IEnumerable<Condition> conditions, RewriteContext context, BackReferenceCollection? backReferences, bool trackAllCaptures) { BackReferenceCollection? prevBackReferences = null; MatchResults? condResult = null; var orSucceeded = false; foreach (var condition in conditions) { if (orSucceeded && condition.OrNext) { continue; } else if (orSucceeded) { orSucceeded = false; continue; } condResult = condition.Evaluate(context, backReferences, prevBackReferences); var currentBackReferences = condResult.BackReferences; if (condition.OrNext) { orSucceeded = condResult.Success; } else if (!condResult.Success) { return condResult; } if (condResult.Success && trackAllCaptures && prevBackReferences != null) { prevBackReferences.Add(condResult.BackReferences); currentBackReferences = prevBackReferences; } prevBackReferences = currentBackReferences; } Debug.Assert(condResult != null, "ConditionEvaluator must be passed at least one condition to evaluate."); return new MatchResults(condResult.Success, prevBackReferences); } }