public int Mark() { if (_markers == null) { _markers = new List <CharStreamState>(); // depth 0 means no backtracking, leave blank _markers.Add(null); } _markDepth++; CharStreamState state = null; if (_markDepth >= _markers.Count) { state = new CharStreamState(); _markers.Add(state); } else { state = _markers[_markDepth]; } state.p = Index; state.line = Line; state.charPositionInLine = CharPositionInLine; _lastMarker = _markDepth; return(_markDepth); }
public void Rewind(int marker) { CharStreamState state = _markers[marker]; // Restore stream state (don't use Seek because it calls UpdateCachedLine() unnecessarily). Index = state.p; Line = state.line; CharPositionInLine = state.charPositionInLine; Release(marker); UpdateCachedLine(); }