1 /* 2 * Copyright (c) 2005, 2020, 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 jdk.internal.icu.impl; 39 40 import java.text.CharacterIterator; 41 42 import jdk.internal.icu.text.UCharacterIterator; 43 44 /** 45 * This class is a wrapper around CharacterIterator and implements the 46 * UCharacterIterator protocol 47 * @author ram 48 */ 49 50 public class CharacterIteratorWrapper extends UCharacterIterator { 51 52 private CharacterIterator iterator; 53 54 public CharacterIteratorWrapper(CharacterIterator iter){ 55 if(iter==null){ 56 throw new IllegalArgumentException(); 57 } 58 iterator = iter; 59 } 60 61 /** 62 * @see UCharacterIterator#current() 63 */ 64 public int current() { 65 int c = iterator.current(); 66 if(c==CharacterIterator.DONE){ 67 return DONE; 68 } 69 return c; 70 } 71 72 /** 73 * @see UCharacterIterator#getLength() 74 */ 75 public int getLength() { 76 return (iterator.getEndIndex() - iterator.getBeginIndex()); 77 } 78 79 /** 80 * @see UCharacterIterator#getIndex() 81 */ 82 public int getIndex() { 83 return iterator.getIndex(); 84 } 85 86 /** 87 * @see UCharacterIterator#next() 88 */ 89 public int next() { 90 int i = iterator.current(); 91 iterator.next(); 92 if(i==CharacterIterator.DONE){ 93 return DONE; 94 } 95 return i; 96 } 97 98 /** 99 * @see UCharacterIterator#previous() 100 */ 101 public int previous() { 102 int i = iterator.previous(); 103 if(i==CharacterIterator.DONE){ 104 return DONE; 105 } 106 return i; 107 } 108 109 /** 110 * @see UCharacterIterator#setIndex(int) 111 */ 112 public void setIndex(int index) { 113 iterator.setIndex(index); 114 } 115 116 /** 117 * @see UCharacterIterator#getText(char[]) 118 */ 119 public int getText(char[] fillIn, int offset){ 120 int length =iterator.getEndIndex() - iterator.getBeginIndex(); 121 int currentIndex = iterator.getIndex(); 122 if(offset < 0 || offset + length > fillIn.length){ 123 throw new IndexOutOfBoundsException(Integer.toString(length)); 124 } 125 126 for (char ch = iterator.first(); ch != CharacterIterator.DONE; ch = iterator.next()) { 127 fillIn[offset++] = ch; 128 } 129 iterator.setIndex(currentIndex); 130 131 return length; 132 } 133 134 /** 135 * Creates a clone of this iterator. Clones the underlying character iterator. 136 * @see UCharacterIterator#clone() 137 */ 138 public Object clone(){ 139 try { 140 CharacterIteratorWrapper result = (CharacterIteratorWrapper) super.clone(); 141 result.iterator = (CharacterIterator)this.iterator.clone(); 142 return result; 143 } catch (CloneNotSupportedException e) { 144 return null; // only invoked if bad underlying character iterator 145 } 146 } 147 }