001package net.automatalib.commons.util.collections; 002 003import java.util.AbstractList; 004import java.util.RandomAccess; 005 006import net.automatalib.commons.util.array.ArrayWritable; 007 008public class CharRange extends AbstractList<Character> implements 009 ArrayWritable<Character>, RandomAccess { 010 011 private final IntRange delegate; 012 013 public CharRange(char low, char high) { 014 this(low, 1, high); 015 } 016 017 public CharRange(char low, int step, char high) { 018 this(new IntRange(low, step, high)); 019 } 020 021 public CharRange(IntRange delegate) { 022 this.delegate = delegate; 023 } 024 025 public char charGet(int index) { 026 int i = delegate.intGet(index); 027 return (char)i; 028 } 029 /* 030 * (non-Javadoc) 031 * @see java.util.AbstractList#get(int) 032 */ 033 @Override 034 public Character get(int index) { 035 return Character.valueOf(charGet(index)); 036 } 037 038 /* 039 * (non-Javadoc) 040 * @see java.util.AbstractCollection#size() 041 */ 042 @Override 043 public int size() { 044 return delegate.size(); 045 } 046 047 /* (non-Javadoc) 048 * @see net.automatalib.commons.util.array.ArrayWritable#writeToArray(int, java.lang.Object[], int, int) 049 */ 050 @Override 051 public void writeToArray(int offset, Object[] array, int tgtOfs, int num) { 052 int si = offset; 053 int ti = tgtOfs; 054 for(int i = 0; i < num; i++) 055 array[ti++] = charGet(si++); 056 } 057 058 public int indexOf(char c) { 059 return delegate.indexOf(c); 060 } 061 062 /* (non-Javadoc) 063 * @see java.util.AbstractList#indexOf(java.lang.Object) 064 */ 065 @Override 066 public int indexOf(Object o) { 067 if(o == null || o.getClass() != Character.class) 068 return -1; 069 return indexOf(((Character)o).charValue()); 070 } 071 072 /* (non-Javadoc) 073 * @see java.util.AbstractList#lastIndexOf(java.lang.Object) 074 */ 075 @Override 076 public int lastIndexOf(Object o) { 077 return indexOf(o); 078 } 079 080 /* (non-Javadoc) 081 * @see java.util.AbstractList#iterator() 082 */ 083 @Override 084 public CharRangeIterator iterator() { 085 return new CharRangeIterator(delegate.iterator()); 086 } 087 088 /* (non-Javadoc) 089 * @see java.util.AbstractList#listIterator() 090 */ 091 @Override 092 public CharRangeIterator listIterator() { 093 return new CharRangeIterator(delegate.listIterator()); 094 } 095 096 /* (non-Javadoc) 097 * @see java.util.AbstractList#listIterator(int) 098 */ 099 @Override 100 public CharRangeIterator listIterator(int index) { 101 return new CharRangeIterator(delegate.listIterator(index)); 102 } 103 104 105 public char charValue(int i) { 106 return (char)delegate.intValue(i); 107 } 108 109}