using System.Collections.Generic; using System.Globalization; using DPumpHydr.WinFrmUI.WenSkin.Json.Utilities; namespace DPumpHydr.WinFrmUI.WenSkin.Json.Linq.JsonPath { internal abstract class PathFilter { public abstract IEnumerable ExecuteFilter(IEnumerable current, bool errorWhenNoMatch); protected static JToken GetTokenIndex(JToken t, bool errorWhenNoMatch, int index) { JArray jArray = t as JArray; JConstructor jConstructor = t as JConstructor; if (jArray != null) { if (jArray.Count <= index) { if (errorWhenNoMatch) { throw new JsonException("Index {0} outside the bounds of JArray.".FormatWith(CultureInfo.InvariantCulture, index)); } return null; } return jArray[index]; } if (jConstructor != null) { if (jConstructor.Count <= index) { if (errorWhenNoMatch) { throw new JsonException("Index {0} outside the bounds of JConstructor.".FormatWith(CultureInfo.InvariantCulture, index)); } return null; } return jConstructor[index]; } if (errorWhenNoMatch) { throw new JsonException("Index {0} not valid on {1}.".FormatWith(CultureInfo.InvariantCulture, index, t.GetType().Name)); } return null; } } }