CompositeExpression
using System;
using System.Collections.Generic;
namespace Newtonsoft.Json.Linq.JsonPath
{
internal class CompositeExpression : QueryExpression
{
public List<QueryExpression> Expressions { get; set; }
public CompositeExpression()
{
Expressions = new List<QueryExpression>();
}
public override bool IsMatch(JToken root, JToken t)
{
List<QueryExpression>.Enumerator enumerator;
switch (base.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();
}
}
}
}