private List <PaddedDiamondRow> MoveDownChain(Letter midpoint, DiamondDepth depth) { var result = base.Handle(midpoint, depth); result.Add(_row); return(result); }
public virtual List <PaddedDiamondRow> Handle(Letter midpoint, DiamondDepth depth) { if (_nextHandler != null) { return(_nextHandler.Handle(midpoint, IncrementDepth(depth))); } else { return(new List <PaddedDiamondRow>()); } }
public virtual List <PaddedDiamondRow> Process(Letter midpoint, DiamondDepth depth, Letter chainLetter) { var rowLength = RowLength(midpoint); _row = new PaddedDiamondRow(depth, chainLetter, rowLength); var result = new List <PaddedDiamondRow> { _row }; if (!midpoint.Equals(chainLetter)) { result.AddRange(MoveDownChain(midpoint, depth)); } return(result); }
public PaddedDiamondRow(DiamondDepth depth, Letter letter, int rowLength) { PadMiddle(depth.ToInt(), letter.ToChar()); PadSides(rowLength); }
private DiamondDepth IncrementDepth(DiamondDepth depth) => new DiamondDepth(depth.ToInt() + 1);
public override List <PaddedDiamondRow> Handle(Letter midpoint, DiamondDepth depth) => Process(midpoint, depth, _link);