Exemple #1
0
        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);
        }
Exemple #2
0
        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();
        }