/// <summary> /// Combines a list of <see cref="DifferenceSimplifier"/> delegates into a single one. /// </summary> /// <param name="simplifiers">The simplifiers.</param> /// <returns>The new single <see cref="DifferenceSimplifier"/>.</returns> /// <exception cref="System.ArgumentNullException"><paramref name="simplifiers"/> is <c>null</c>.</exception> public static DifferenceSimplifier Combine(IEnumerable <DifferenceSimplifier> simplifiers) { if (simplifiers == null) { throw new ArgumentNullException(nameof(simplifiers)); } DifferenceSimplifier current = null; foreach (var item in simplifiers) { if (current == null) { current = item; } else { var previous = current; current = x => current(previous(x)); } } if (current == null) { current = x => x; } return(current); }
/// <summary> /// Adds a simplifier to the differences. /// </summary> /// <param name="simplifier">The simplifier to add.</param> /// <returns><c>this</c> instance.</returns> public Differencer <T> AddSimplifier(DifferenceSimplifier simplifier) { if (simplifier == null) { throw new ArgumentNullException(nameof(simplifier)); } if (_simplifier == null) { _simplifier = simplifier; } else { _simplifier = DifferenceSimplifiers.Combine(_simplifier, simplifier); } return(this); }