001/* Copyright (C) 2013 TU Dortmund 002 * This file is part of AutomataLib, http://www.automatalib.net/. 003 * 004 * AutomataLib is free software; you can redistribute it and/or 005 * modify it under the terms of the GNU Lesser General Public 006 * License version 3.0 as published by the Free Software Foundation. 007 * 008 * AutomataLib is distributed in the hope that it will be useful, 009 * but WITHOUT ANY WARRANTY; without even the implied warranty of 010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 011 * Lesser General Public License for more details. 012 * 013 * You should have received a copy of the GNU Lesser General Public 014 * License along with AutomataLib; if not, see 015 * http://www.gnu.de/documents/lgpl.en.html. 016 */ 017package net.automatalib.commons.util.collections; 018 019import java.util.AbstractList; 020import java.util.RandomAccess; 021 022import net.automatalib.commons.util.array.ArrayWritable; 023 024public class CharRange extends AbstractList<Character> implements 025 ArrayWritable<Character>, RandomAccess { 026 027 private final IntRange delegate; 028 029 public CharRange(char low, char high) { 030 this(low, high, 1); 031 } 032 033 public CharRange(char low, char high, int step) { 034 this(new IntRange(low, high, step)); 035 } 036 037 public CharRange(IntRange delegate) { 038 this.delegate = delegate; 039 } 040 041 public char charGet(int index) { 042 int i = delegate.intGet(index); 043 return (char)i; 044 } 045 /* 046 * (non-Javadoc) 047 * @see java.util.AbstractList#get(int) 048 */ 049 @Override 050 public Character get(int index) { 051 return Character.valueOf(charGet(index)); 052 } 053 054 /* 055 * (non-Javadoc) 056 * @see java.util.AbstractCollection#size() 057 */ 058 @Override 059 public int size() { 060 return delegate.size(); 061 } 062 063 /* (non-Javadoc) 064 * @see net.automatalib.commons.util.array.ArrayWritable#writeToArray(int, java.lang.Object[], int, int) 065 */ 066 @Override 067 public void writeToArray(int offset, Object[] array, int tgtOfs, int num) { 068 int si = offset; 069 int ti = tgtOfs; 070 for(int i = 0; i < num; i++) 071 array[ti++] = charGet(si++); 072 } 073 074 public int indexOf(char c) { 075 return delegate.indexOf(c); 076 } 077 078 /* (non-Javadoc) 079 * @see java.util.AbstractList#indexOf(java.lang.Object) 080 */ 081 @Override 082 public int indexOf(Object o) { 083 if(o == null || o.getClass() != Character.class) 084 return -1; 085 return indexOf(((Character)o).charValue()); 086 } 087 088 /* (non-Javadoc) 089 * @see java.util.AbstractList#lastIndexOf(java.lang.Object) 090 */ 091 @Override 092 public int lastIndexOf(Object o) { 093 return indexOf(o); 094 } 095 096 /* (non-Javadoc) 097 * @see java.util.AbstractList#iterator() 098 */ 099 @Override 100 public CharRangeIterator iterator() { 101 return new CharRangeIterator(delegate.iterator()); 102 } 103 104 /* (non-Javadoc) 105 * @see java.util.AbstractList#listIterator() 106 */ 107 @Override 108 public CharRangeIterator listIterator() { 109 return new CharRangeIterator(delegate.listIterator()); 110 } 111 112 /* (non-Javadoc) 113 * @see java.util.AbstractList#listIterator(int) 114 */ 115 @Override 116 public CharRangeIterator listIterator(int index) { 117 return new CharRangeIterator(delegate.listIterator(index)); 118 } 119 120 121 public char charValue(int i) { 122 return (char)delegate.intValue(i); 123 } 124 125}