/// <summary> /// Process a single filter, with support for skipping filter or stopping completely. /// </summary> /// <param name="data">Container for data to be processed.</param> /// <returns>Returns true when filter is processed, false when flow is interrupted.</returns> public bool Drip(ref T data, IFilter <T> filter) { if (filter == null) { return(true); } if (filter.Stop(data)) { return(false); } if (filter.CanModify(data)) { data = filter.Modify(data); } return(true); }