aboutsummaryrefslogtreecommitdiff
path: root/src/rejava/io/StringReader.java
blob: dc397695914966e15f0a8feec33a130db1d52e30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package rejava.io;

/**
 * A minimal subset of java.io.StringReader.
 * (http://hg.openjdk.java.net/jdk7/jdk7
 * /jdk/file/9b8c96f96a0f/src/share/classes/java/io/StringReader.java)
 * 
 * @author Pacien TRAN-GIRARD
 */
public class StringReader extends Reader {

	private final String str;
	private int index;

	public StringReader(final String str) {
		this.str = str;
	}

	@Override
	public int read() {
		if (this.str == null) {
			return -1;
		}
		if (this.index >= this.str.length()) {
			return -1;
		}
		this.index++;
		return this.str.charAt(this.index);
	}

	@Override
	public int read(final char[] cbuf, final int off, final int len) {
		if ((off < 0) || (off > cbuf.length) || (len < 0) || ((off + len) > cbuf.length) || ((off + len) < 0)) {
			throw new IndexOutOfBoundsException();
		}
		if (len == 0) {
			return 0;
		}
		if (this.str == null) {
			return -1;
		}
		if (this.index >= this.str.length()) {
			return -1;
		}
		final int n = Math.min(this.str.length() - this.index, len);
		this.str.getChars(this.index, this.index + n, cbuf, off);
		this.index += n;
		return n;
	}

}