samples/delegatingwriterfinal/src-api2.0/api/CharSeq.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:53:06 +0200
changeset 65 4db7ceebd2b3
permissions -rw-r--r--
Nonsubclassable Writer example
jtulach@65
     1
package api;
jtulach@65
     2
jtulach@65
     3
/**
jtulach@65
     4
 *
jtulach@65
     5
 * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jtulach@65
     6
 */
jtulach@65
     7
final class CharSeq implements CharSequence {
jtulach@65
     8
    final char[] arr;
jtulach@65
     9
    final int off;
jtulach@65
    10
    final int len;
jtulach@65
    11
    final int c;
jtulach@65
    12
    
jtulach@65
    13
    public CharSeq(int c) {
jtulach@65
    14
        this.arr = null;
jtulach@65
    15
        this.off = 0;
jtulach@65
    16
        this.len = 1;
jtulach@65
    17
        this.c = c;
jtulach@65
    18
    }
jtulach@65
    19
jtulach@65
    20
    public CharSeq(char[] arr, int off, int len) {
jtulach@65
    21
        this.arr = arr;
jtulach@65
    22
        this.off = off;
jtulach@65
    23
        this.len = len;
jtulach@65
    24
        this.c = -1;
jtulach@65
    25
    }
jtulach@65
    26
jtulach@65
    27
    public int length() {
jtulach@65
    28
        return arr == null ? 1 : len;
jtulach@65
    29
    }
jtulach@65
    30
jtulach@65
    31
    public char charAt(int index) {
jtulach@65
    32
        if (index < 0) {
jtulach@65
    33
            throw new IndexOutOfBoundsException();
jtulach@65
    34
        }
jtulach@65
    35
        if (arr == null) {
jtulach@65
    36
            if (index > 0) {
jtulach@65
    37
                throw new IndexOutOfBoundsException();
jtulach@65
    38
            }
jtulach@65
    39
            return (char)c;
jtulach@65
    40
        } else {
jtulach@65
    41
            if (index >= len) {
jtulach@65
    42
                throw new IndexOutOfBoundsException();
jtulach@65
    43
            }
jtulach@65
    44
            return arr[off + index];
jtulach@65
    45
        }
jtulach@65
    46
    }
jtulach@65
    47
jtulach@65
    48
    public CharSequence subSequence(int start, int end) {
jtulach@65
    49
        if (end >= this.len) {
jtulach@65
    50
            throw new IndexOutOfBoundsException();
jtulach@65
    51
        }
jtulach@65
    52
        char[] array = arr == null ? new char[]{ (char)c } : arr;
jtulach@65
    53
        return new CharSeq(array, off + start, off + end);
jtulach@65
    54
    }
jtulach@65
    55
jtulach@65
    56
}