private static bool Check_bin(int binIndex, SelectDueCardContextModel model) { if (binIndex <= 0) { return(false); } if (binIndex >= model.Bins.Length) { return(false); } if (model.Bins[binIndex].Length == 0) { return(false); } var configIndex = binIndex - 1; if (configIndex < 0) { return(false); } if (configIndex >= model.Config.Bins.Length) { return(false); } if (binIndex == model.DueBinIndex) { return(model.Bins[binIndex].Length >= model.Config.Bins[configIndex].LowerDueThreshold); } return(model.Bins[binIndex].Length >= model.Config.Bins[configIndex].UpperDueThreshold); }
private static Event[] Select_first_bin_with_cards(SelectDueCardContextModel model) { for (var i = 1; i < Math.Min(model.Bins.Length - 1, model.Config.Bins.Length + 1); i++) { if (model.Bins[i].Length > 0) { return new[] { new DueCardSelected { CardId = model.Bins[i].First(), BinIndex = i } } } } ; return(new Event[0]); }
private static Event[] Select_due_bin_in_specific_order(SelectDueCardContextModel model) { var dueBinIndex = Order_in_which_to_check_bins().FirstOrDefault(binIndex => Check_bin(binIndex, model)); return(dueBinIndex > 0 ? new[] { new DueCardSelected { CardId = model.Bins[dueBinIndex].First(), BinIndex = dueBinIndex } } : new Event[0]); IEnumerable <int> Order_in_which_to_check_bins() => new[] { model.DueBinIndex, 1 } .Concat(Enumerable.Range(2, model.Config.Bins.Length - 1).Reverse()); }
private static Event[] Fill_bin_1_and_select(SelectDueCardContextModel model) { var additionalCardsForBin1 = model.Bins[0].Take(model.Config.Bins[0].UpperDueThreshold - model.Bins[1].Length).ToArray(); model.Bins[1] = model.Bins[1].Concat(additionalCardsForBin1).ToArray(); var events = additionalCardsForBin1.Select(cardId => new CardMovedTo { CardId = cardId, BinIndex = 1 }).ToList <Event>(); if (Check_bin(1, model)) { events.Add(new DueCardSelected { CardId = model.Bins[1].First(), BinIndex = 1 }); } return(events.ToArray()); }