private IEnumerable <CsvLine> LinesImpl() { Func <CsvLineBuilder, CsvBehaviour, ProcessingResult> ProcessCharacter = BeginningOfLine; var state = new CsvLineBuilder(_csvLayout, _behaviour); while (state.ReadNext(_textReader)) { var result = ProcessCharacter(state, _behaviour); var line = result.Line; if (line.HasValue) { FieldCount = state.FieldCount; yield return(line.Value); } ProcessCharacter = result.Next; state = result.State; } var finalLine = state.NextField().ToLine(); FieldCount = state.FieldCount; yield return(finalLine); }
public ProcessingResult(Func <CsvLineBuilder, CsvBehaviour, ProcessingResult> Next, CsvLineBuilder state, CsvLine line = null) : this(new Option <CsvLine>(line), Next, state) { }
record ProcessingResult(Option <CsvLine> Line, Func <CsvLineBuilder, CsvBehaviour, ProcessingResult> Next, CsvLineBuilder State) {