File: IISUrlRewrite\ConditionCollection.cs
Web Access
Project: src\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.Collections;
 
namespace Microsoft.AspNetCore.Rewrite.IISUrlRewrite;
 
internal sealed class ConditionCollection : IEnumerable<Condition>
{
    private readonly List<Condition> _conditions = new List<Condition>();
 
    public LogicalGrouping Grouping { get; }
    public bool TrackAllCaptures { get; }
 
    public ConditionCollection()
        : this(LogicalGrouping.MatchAll, trackAllCaptures: false)
    {
    }
 
    public ConditionCollection(LogicalGrouping grouping, bool trackAllCaptures)
    {
        Grouping = grouping;
        TrackAllCaptures = trackAllCaptures;
    }
 
    public int Count => _conditions.Count;
 
    public Condition this[int index]
    {
        get
        {
            if (index < _conditions.Count)
            {
                return _conditions[index];
            }
            throw new ArgumentOutOfRangeException(null, $"Cannot access condition at index {index}. Only {_conditions.Count} conditions were captured.");
        }
    }
 
    public void Add(Condition condition)
    {
        if (condition != null)
        {
            _conditions.Add(condition);
        }
    }
 
    public void AddConditions(IEnumerable<Condition> conditions)
    {
        if (conditions != null)
        {
            _conditions.AddRange(conditions);
        }
    }
 
    IEnumerator IEnumerable.GetEnumerator()
    {
        return _conditions.GetEnumerator();
    }
 
    public IEnumerator<Condition> GetEnumerator()
    {
        return _conditions.GetEnumerator();
    }
}