Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
 public Matchable(T input, ConsumptionAdder <TC> adder)
 {
     Input      = input;
     this.adder = adder;
 }