public static StageVm SwitchBlocksToStageVm( this core.Sorting.ISwitch[][] switchBlocks, int stageIndex, StageVmStyle stageVmStyle, int order, SortableVm sortableVm) { var kpVms = switchBlocks.ToKeyPairVms(stageIndex, stageVmStyle); return(new StageVm( stageIndex: stageIndex, stageVmStyle: stageVmStyle.ChangeSectionCount(switchBlocks.Length), order: order, keyPairVms: kpVms, sortableVm: sortableVm.ChangeSectionCount(switchBlocks.Length) )); }
public static Tuple <StageVm, SortableVm> ToNextStep(this StageVm stageVm, SortableVm sortableVm = null) { if (stageVm.SortableVm == null) { if (sortableVm == null) { return(new Tuple <StageVm, SortableVm>( item1: stageVm, item2: null)); } return(new Tuple <StageVm, SortableVm>( item1: new StageVm( stageIndex: stageVm.StageIndex, stageVmStyle: stageVm.StageVmStyle, order: stageVm.Order, keyPairVms: stageVm.KeyPairVms, sortableVm: sortableVm.ChangeSectionCount(stageVm.StageVmStyle.SortableVmStyle.SectionCount)), item2: null)); } if (stageVm.SortableVm.StageVmStep == StageVmStep.PostSort) { if (sortableVm == null) { return(new Tuple <StageVm, SortableVm>( item1: stageVm, item2: null)); } return(new Tuple <StageVm, SortableVm>( item1: new StageVm( stageIndex: stageVm.StageIndex, stageVmStyle: stageVm.StageVmStyle, order: stageVm.Order, keyPairVms: stageVm.KeyPairVms, sortableVm: sortableVm.ChangeSectionCount(stageVm.StageVmStyle.SortableVmStyle.SectionCount) ), item2: null)); } switch (stageVm.SortableVm.StageVmStep) { case StageVmStep.Init: return(new Tuple <StageVm, SortableVm>( item1: new StageVm( stageIndex: stageVm.StageIndex, stageVmStyle: stageVm.StageVmStyle, order: stageVm.Order, keyPairVms: stageVm.KeyPairVms, sortableVm: stageVm.SortableVm.ToLeftStep(stageVm.KeyPairVms.ToArray())), item2: null)); case StageVmStep.Left: return(new Tuple <StageVm, SortableVm>( item1: new StageVm( stageIndex: stageVm.StageIndex, stageVmStyle: stageVm.StageVmStyle, order: stageVm.Order, keyPairVms: stageVm.KeyPairVms, sortableVm: stageVm.SortableVm.ToPreSortStep(stageVm.KeyPairVms.ToArray())), item2: null)); case StageVmStep.Presort: return(new Tuple <StageVm, SortableVm>( item1: new StageVm( stageIndex: stageVm.StageIndex, stageVmStyle: stageVm.StageVmStyle, order: stageVm.Order, keyPairVms: stageVm.KeyPairVms.UpdateKeyPairVms(stageVm.SortableVm.PastSortableItemVms), sortableVm: stageVm.SortableVm.ToPostSortStep()), item2: stageVm.SortableVm.ToInitStep())); case StageVmStep.PostSort: return(new Tuple <StageVm, SortableVm>( item1: new StageVm( stageIndex: stageVm.StageIndex, stageVmStyle: stageVm.StageVmStyle, order: stageVm.Order, keyPairVms: stageVm.KeyPairVms, sortableVm: null), item2: null)); default: throw new Exception($"{stageVm.SortableVm.StageVmStep} not handled"); } }