public MatchResult <TFact, TConsumption> Match2 <TFact, TConsumption>( IEnumerable <TFact> input, IEnumerable <IConsumer <TFact, TConsumption> > consumers, ConsumptionAdder <TConsumption> consumptionAdder) { var scaffolding = input.Select(x => new Matchable <TFact, TConsumption>(x, consumptionAdder)).ToList(); var result = new MatchResult <TFact, TConsumption>(); var toProcess = scaffolding; foreach (var consumer in consumers) { if (!toProcess.Any()) { result.Consumers[ConsumerStatus.Active].Add(consumer); continue; } bool consumerCompleted = toProcess .Select(element => consumer.Match(element)) .Any(status => status == ConsumerStatus.Complete); if (consumerCompleted) { result.Consumers[ConsumerStatus.Complete].Add(consumer); } toProcess = toProcess.Where(x => !x.IsFullyConsumed).ToList(); } // return all elements result.Matches = scaffolding; //result.ConsumerInfo = scaffolding. // TODO return(result); }
public List <Match <T, TC> > Match <T, TC>( IEnumerable <T> input, IEnumerable <IConsumer <T, TC> > consumers, ConsumptionAdder <TC> consumptionAdder) { var wrappers = input.Select(x => new Matchable <T, TC>(x, consumptionAdder)).ToList(); return(Match(wrappers, consumers)); }
public Matchable(T input, ConsumptionAdder <TC> adder) { Input = input; this.adder = adder; }