CompositeExpression
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace Newtonsoft.Json.Linq.JsonPath
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
internal class CompositeExpression : QueryExpression
{
public List<QueryExpression> Expressions { get; set; }
public CompositeExpression(QueryOperator operator)
: base(operator)
{
Expressions = new List<QueryExpression>();
}
public override bool IsMatch(JToken root, JToken t)
{
List<QueryExpression>.Enumerator enumerator;
switch (Operator) {
case QueryOperator.And:
enumerator = Expressions.GetEnumerator();
try {
while (enumerator.MoveNext()) {
if (!enumerator.Current.IsMatch(root, t))
return false;
}
} finally {
((IDisposable)enumerator).Dispose();
}
return true;
case QueryOperator.Or:
enumerator = Expressions.GetEnumerator();
try {
while (enumerator.MoveNext()) {
if (enumerator.Current.IsMatch(root, t))
return true;
}
} finally {
((IDisposable)enumerator).Dispose();
}
return false;
default:
throw new ArgumentOutOfRangeException();
}
}
}
}