1 /* 2 * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /* 27 ******************************************************************************* 28 * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * 29 * * 30 * The original version of this source code and documentation is copyrighted * 31 * and owned by IBM, These materials are provided under terms of a License * 32 * Agreement between IBM and Sun. This technology is protected by multiple * 33 * US and International patents. This notice and attribution to IBM may not * 34 * to removed. * 35 ******************************************************************************* 36 */ 37 38 package sun.text.normalizer; 39 40 import java.text.CharacterIterator; 41 42 /** 43 * This class is a wrapper around CharacterIterator and implements the 44 * UCharacterIterator protocol 45 * @author ram 46 */ 47 48 class CharacterIteratorWrapper extends UCharacterIterator { 49 50 private CharacterIterator iterator; 51 52 public CharacterIteratorWrapper(CharacterIterator iter){ 53 if(iter==null){ 54 throw new IllegalArgumentException(); 55 } 56 iterator = iter; 57 } 58 59 /** 60 * @see UCharacterIterator#current() 61 */ 62 public int current() { 63 int c = iterator.current(); 64 if(c==CharacterIterator.DONE){ 65 return DONE; 66 } 67 return c; 68 } 69 70 /** 71 * @see UCharacterIterator#getLength() 72 */ 73 public int getLength() { 74 return (iterator.getEndIndex() - iterator.getBeginIndex()); 75 } 76 77 /** 78 * @see UCharacterIterator#getIndex() 79 */ 80 public int getIndex() { 81 return iterator.getIndex(); 82 } 83 84 /** 85 * @see UCharacterIterator#next() 86 */ 87 public int next() { 88 int i = iterator.current(); 89 iterator.next(); 90 if(i==CharacterIterator.DONE){ 91 return DONE; 92 } 93 return i; 94 } 95 96 /** 97 * @see UCharacterIterator#previous() 98 */ 99 public int previous() { 100 int i = iterator.previous(); 101 if(i==CharacterIterator.DONE){ 102 return DONE; 103 } 104 return i; 105 } 106 107 /** 108 * @see UCharacterIterator#setIndex(int) 109 */ 110 public void setIndex(int index) { 111 iterator.setIndex(index); 112 } 113 114 /** 115 * @see UCharacterIterator#getText(char[]) 116 */ 117 public int getText(char[] fillIn, int offset){ 118 int length =iterator.getEndIndex() - iterator.getBeginIndex(); 119 int currentIndex = iterator.getIndex(); 120 if(offset < 0 || offset + length > fillIn.length){ 121 throw new IndexOutOfBoundsException(Integer.toString(length)); 122 } 123 124 for (char ch = iterator.first(); ch != CharacterIterator.DONE; ch = iterator.next()) { 125 fillIn[offset++] = ch; 126 } 127 iterator.setIndex(currentIndex); 128 129 return length; 130 } 131 132 /** 133 * Creates a clone of this iterator. Clones the underlying character iterator. 134 * @see UCharacterIterator#clone() 135 */ 136 public Object clone(){ 137 try { 138 CharacterIteratorWrapper result = (CharacterIteratorWrapper) super.clone(); 139 result.iterator = (CharacterIterator)this.iterator.clone(); 140 return result; 141 } catch (CloneNotSupportedException e) { 142 return null; // only invoked if bad underlying character iterator 143 } 144 } 145 }