/// <summary> /// Creates a request based off the results of potential consumption /// </summary> /// <param name="consumerResult">The consumer result.</param> /// <param name="selected">The selected.</param> /// <returns>The request</returns> public ConsumptionRequest Create(PotentialConsumerResult consumerResult, ConsumptionResult selected) { for (var i = 1; i < selected.NumConsumed; i++) { foreach (var parser in consumerResult.Chain) { var info = consumerResult.Info.Consume(i); var res = parser.CanConsume(selected, info); if (res.Info > info && res.ConsumingParameter != null && res.ConsumingParameter is Switch) { return(new ConsumptionRequest(consumerResult.Info, i)); } } } return(new ConsumptionRequest(consumerResult.Info, selected.NumConsumed)); }
/// <summary> /// Selects the specified result. /// </summary> /// <param name="result">The result.</param> /// <returns>ConsumptionResult.</returns> /// <exception cref="ForwardProgressException"></exception> public virtual ConsumptionResult Select(PotentialConsumerResult result) { ConsumptionResult foundResult = null; var switchResults = result.ConsumptionResults.Where(r => r.ConsumingParameter is Switch).ToList(); if (switchResults.Any()) { foundResult = switchResults.FirstOrDefault(r => result.Chain.Contains(r.ConsumingParameter.Parser)); } if (foundResult == null) { foundResult = result.ConsumptionResults.FirstOrDefault(r => result.Chain.Contains(r.ConsumingParameter .Parser)); } if (foundResult == null) { throw new ForwardProgressException(result.Info); } return(foundResult); }