public RCCube Read() { if (_spec.Forward) { int startRow = _spec.Start; if (_source.Axis.Global != null && _source.Axis.Count > 0) { // Max prevents the row from going negative if the section has been cleared. startRow -= (int)_initg; startRow = Math.Max(startRow, 0); } _source.VisitCellsForward(this, startRow, _end); _acceptedLines = _inLines; } else { _source.VisitCellsBackward(this, _spec.Start, _end); _target.ReverseInPlace(); _inLines.ReverseInPlace(); _acceptedLines = _inLines; } _acceptedSymbols = new RCArray <RCSymbolScalar> (_inSymbols.Keys); return(_target); }