diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/java/com/sun/gluegen/pcpp/ConcatenatingReader.java | 216 |
1 files changed, 108 insertions, 108 deletions
diff --git a/src/java/com/sun/gluegen/pcpp/ConcatenatingReader.java b/src/java/com/sun/gluegen/pcpp/ConcatenatingReader.java index 90192d2..11249f7 100755 --- a/src/java/com/sun/gluegen/pcpp/ConcatenatingReader.java +++ b/src/java/com/sun/gluegen/pcpp/ConcatenatingReader.java @@ -45,130 +45,130 @@ import java.io.*; character ('\') and concatenates them with the next line. */ public class ConcatenatingReader extends FilterReader { - // Any leftover characters go here - private char[] curBuf; - private int curPos; - private BufferedReader in; - private static String newline = System.getProperty("line.separator"); - - /** This class requires that the input reader be a BufferedReader so - it can do line-oriented operations. */ - public ConcatenatingReader(BufferedReader in) { - super(in); - this.in = in; - } - - public int read() throws IOException { - char[] tmp = new char[1]; - int num = read(tmp, 0, 1); - if (num < 0) - return -1; - return tmp[0]; - } - - // It's easier not to support mark/reset since we don't need it - public boolean markSupported() { - return false; - } - - public void mark(int readAheadLimit) throws IOException { - throw new IOException("mark/reset not supported"); - } - - public void reset() throws IOException { - throw new IOException("mark/reset not supported"); - } - - public boolean ready() throws IOException { - if (curBuf != null || in.ready()) - return true; - return false; - } - - public int read(char[] cbuf, int off, int len) throws IOException { - if (curBuf == null) { - nextLine(); + // Any leftover characters go here + private char[] curBuf; + private int curPos; + private BufferedReader in; + private static String newline = System.getProperty("line.separator"); + + /** This class requires that the input reader be a BufferedReader so + it can do line-oriented operations. */ + public ConcatenatingReader(BufferedReader in) { + super(in); + this.in = in; } - if (curBuf == null) { - return -1; + public int read() throws IOException { + char[] tmp = new char[1]; + int num = read(tmp, 0, 1); + if (num < 0) + return -1; + return tmp[0]; } - int numRead = 0; - - while ((len > 0) && (curBuf != null) && (curPos < curBuf.length)) { - cbuf[off] = curBuf[curPos]; - ++curPos; - ++off; - --len; - ++numRead; - if (curPos == curBuf.length) { - nextLine(); - } + // It's easier not to support mark/reset since we don't need it + public boolean markSupported() { + return false; } - return numRead; - } + public void mark(int readAheadLimit) throws IOException { + throw new IOException("mark/reset not supported"); + } - public long skip(long n) throws IOException { - long numSkipped = 0; + public void reset() throws IOException { + throw new IOException("mark/reset not supported"); + } - while (n > 0) { - int intN = (int) n; - char[] tmp = new char[intN]; - int numRead = read(tmp, 0, intN); - n -= numRead; - numSkipped += numRead; - if (numRead < intN) - break; + public boolean ready() throws IOException { + if (curBuf != null || in.ready()) + return true; + return false; } - return numSkipped; - } - - private void nextLine() throws IOException { - String cur = in.readLine(); - if (cur == null) { - curBuf = null; - return; + + public int read(char[] cbuf, int off, int len) throws IOException { + if (curBuf == null) { + nextLine(); + } + + if (curBuf == null) { + return -1; + } + + int numRead = 0; + + while ((len > 0) && (curBuf != null) && (curPos < curBuf.length)) { + cbuf[off] = curBuf[curPos]; + ++curPos; + ++off; + --len; + ++numRead; + if (curPos == curBuf.length) { + nextLine(); + } + } + + return numRead; } - // The trailing newline was trimmed by the readLine() method. See - // whether we have to put it back or not, depending on whether the - // last character of the line is the concatenation character. - int numChars = cur.length(); - boolean needNewline = true; - if ((numChars > 0) && - (cur.charAt(cur.length() - 1) == '\\')) { - --numChars; - needNewline = false; + + public long skip(long n) throws IOException { + long numSkipped = 0; + + while (n > 0) { + int intN = (int) n; + char[] tmp = new char[intN]; + int numRead = read(tmp, 0, intN); + n -= numRead; + numSkipped += numRead; + if (numRead < intN) + break; + } + return numSkipped; } - char[] buf = new char[numChars + (needNewline ? newline.length() : 0)]; - cur.getChars(0, numChars, buf, 0); - if (needNewline) { - newline.getChars(0, newline.length(), buf, numChars); + + private void nextLine() throws IOException { + String cur = in.readLine(); + if (cur == null) { + curBuf = null; + return; + } + // The trailing newline was trimmed by the readLine() method. See + // whether we have to put it back or not, depending on whether the + // last character of the line is the concatenation character. + int numChars = cur.length(); + boolean needNewline = true; + if ((numChars > 0) && + (cur.charAt(cur.length() - 1) == '\\')) { + --numChars; + needNewline = false; + } + char[] buf = new char[numChars + (needNewline ? newline.length() : 0)]; + cur.getChars(0, numChars, buf, 0); + if (needNewline) { + newline.getChars(0, newline.length(), buf, numChars); + } + curBuf = buf; + curPos = 0; } - curBuf = buf; - curPos = 0; - } - - // Test harness - /* - public static void main(String[] args) throws IOException { - if (args.length != 1) { + + // Test harness + /* + public static void main(String[] args) throws IOException { + if (args.length != 1) { System.out.println("Usage: java ConcatenatingReader [file name]"); System.exit(1); - } + } - ConcatenatingReader reader = new ConcatenatingReader(new BufferedReader(new FileReader(args[0]))); - OutputStreamWriter writer = new OutputStreamWriter(System.out); - char[] buf = new char[8192]; - boolean done = false; - while (!done && reader.ready()) { + ConcatenatingReader reader = new ConcatenatingReader(new BufferedReader(new FileReader(args[0]))); + OutputStreamWriter writer = new OutputStreamWriter(System.out); + char[] buf = new char[8192]; + boolean done = false; + while (!done && reader.ready()) { int numRead = reader.read(buf, 0, buf.length); writer.write(buf, 0, numRead); if (numRead < buf.length) - done = true; - } - writer.flush(); - } - */ + done = true; + } + writer.flush(); + } + */ } |