+++ /dev/null
-package org.ibex.util;
-import java.io.*;
-
-public class LineReader {
-
- private int MAXBUF = 1024 * 16;
- char[] buf = new char[MAXBUF];
- int buflen = 0;
- Reader r;
- Vec pushback = new Vec();
-
- public LineReader(Reader r) { this.r = r; }
-
- public void pushback(String s) { pushback.push(s); }
-
- public String readLine() throws IOException {
- while(true) {
- if (pushback.size() > 0) return (String)pushback.pop();
- for(int i=0; i<buflen; i++) {
- if (buf[i] == '\n') {
- String ret;
- if (buf[i-1] == '\r') ret = new String(buf, 0, i-1);
- else ret = new String(buf, 0, i);
- System.arraycopy(buf, i+1, buf, 0, buflen - (i+1));
- buflen -= i+1;
- return ret;
- }
- }
- if (buflen == MAXBUF) {
- char[] buf2 = new char[MAXBUF*2];
- System.arraycopy(buf, 0, buf2, 0, buflen);
- buf = buf2;
- MAXBUF *= 2;
- }
- int numread = r.read(buf, buflen, MAXBUF - buflen);
- if (numread == -1) {
- if (buflen == 0) return null;
- String ret = new String(buf, 0, buflen);
- buflen = 0;
- return ret;
- } else {
- buflen += numread;
- }
- }
- }
-}