/** * */ package querqy; /** * @author René Kriegler, @renekrie * */ public class SimpleComparableCharSequence implements ComparableCharSequence { final char[] value; final int start; final int length; public SimpleComparableCharSequence(final char[] value, final int start, final int length) { if ((start + length) > value.length) { throw new ArrayIndexOutOfBoundsException(start + length); } this.value = value; this.start = start; this.length = length; } /* * (non-Javadoc) * * @see java.lang.CharSequence#length() */ @Override public int length() { return length; } /* * (non-Javadoc) * * @see java.lang.CharSequence#charAt(int) */ @Override public char charAt(final int index) { if (index >= length) { throw new ArrayIndexOutOfBoundsException(index); } return value[start + index]; } /* * (non-Javadoc) * * @see java.lang.CharSequence#subSequence(int, int) */ @Override public ComparableCharSequence subSequence(final int start, final int end) { if (end > length) { throw new ArrayIndexOutOfBoundsException(end); } if (start < 0) { throw new ArrayIndexOutOfBoundsException(start); } return new SimpleComparableCharSequence(value, this.start + start, end - start); } @Override public int compareTo(final CharSequence other) { return CharSequenceUtil.compare(this, other); } @Override public int hashCode() { return CharSequenceUtil.hashCode(this); } @Override public boolean equals(final Object obj) { return CharSequenceUtil.equals(this, obj); } @Override public String toString() { return new String(value, start, length); } }