/******************************************************************************* * Copyright (c) 2004, 2016 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial implementation * Anton Leherbauer - adding tokens for preprocessing directives * Markus Schorn - classification of preprocessing directives. *******************************************************************************/ package org.eclipse.cdt.internal.formatter.scanner; import java.io.IOException; import java.io.Reader; import java.util.Stack; public class ScannerContext { private Reader fReader; private int fOffset; private Stack<Integer> fUndo = new Stack<Integer>(); public ScannerContext() { } public ScannerContext initialize(Reader r) { fReader = r; fOffset = 0; return this; } public ScannerContext initialize(Reader r, int offset) { try { r.skip(offset); } catch (IOException exc) { throw new RuntimeException(exc); } fReader = r; fOffset = offset; return this; } public int read() throws IOException { ++fOffset; return fReader.read(); } /** * Returns the offset. * @return int */ public final int getOffset() { return fOffset; } /** * Returns the reader. * @return Reader */ public final Reader getReader() { return fReader; } public final int undoStackSize() { return fUndo.size(); } /** * Returns the undo. * @return int */ public final int popUndo() { return fUndo.pop().intValue(); } /** * Sets the undo. * @param undo The undo to set */ public void pushUndo(int undo) { this.fUndo.push(Integer.valueOf(undo)); } }