package com.googlecode.totallylazy.parser;
import com.googlecode.totallylazy.Segment;
public class CharacterSequence implements CharSequence {
private final StringBuilder buffer = new StringBuilder();
private Segment<Character> current;
private CharacterSequence(Segment<Character> characters) {
this.current = characters;
}
public static CharacterSequence charSequence(final Segment<Character> characters) {
return new CharacterSequence(characters);
}
@Override
public int length() {
return Integer.MAX_VALUE;
}
@Override
public char charAt(int index) {
if (contains(index)) return buffer.charAt(index);
for (int i = buffer.length(); i < index + 1; i++) {
buffer.append(current.head());
current = current.tail();
}
return buffer.charAt(index);
}
@Override
public CharSequence subSequence(int start, int end) {
int index = end - 1;
if(!contains(index)) charAt(index);
return buffer.subSequence(start, end);
}
@Override
public String toString() {
return buffer.toString();
}
public Segment<Character> remainder() {
return current;
}
private boolean contains(int index) {
return index < buffer.length();
}
}