]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/core/src/com/ibm/icu/impl/CharacterIteratorWrapper.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / core / src / com / ibm / icu / impl / CharacterIteratorWrapper.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1996-2010, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.impl;\r
8 \r
9 import java.text.CharacterIterator;\r
10 \r
11 import com.ibm.icu.text.UCharacterIterator;\r
12 \r
13 /**\r
14  * This class is a wrapper around CharacterIterator and implements the \r
15  * UCharacterIterator protocol\r
16  * @author ram\r
17  */\r
18 \r
19 public class CharacterIteratorWrapper extends UCharacterIterator {\r
20     \r
21     private CharacterIterator iterator;\r
22     \r
23     \r
24     public CharacterIteratorWrapper(CharacterIterator iter){\r
25         if(iter==null){\r
26             throw new IllegalArgumentException();\r
27         }\r
28         iterator     = iter;   \r
29     }\r
30 \r
31     /**\r
32      * @see UCharacterIterator#current()\r
33      */\r
34     public int current() {\r
35         int c = iterator.current();\r
36         if(c==CharacterIterator.DONE){\r
37           return DONE;\r
38         }\r
39         return c;\r
40     }\r
41 \r
42     /**\r
43      * @see UCharacterIterator#getLength()\r
44      */\r
45     public int getLength() {\r
46         return (iterator.getEndIndex() - iterator.getBeginIndex());\r
47     }\r
48 \r
49     /**\r
50      * @see UCharacterIterator#getIndex()\r
51      */\r
52     public int getIndex() {\r
53         return iterator.getIndex();\r
54     }\r
55 \r
56     /**\r
57      * @see UCharacterIterator#next()\r
58      */\r
59     public int next() {\r
60         int i = iterator.current();\r
61         iterator.next();\r
62         if(i==CharacterIterator.DONE){  \r
63           return DONE;\r
64         }\r
65         return i;\r
66     }\r
67 \r
68     /**\r
69      * @see UCharacterIterator#previous()\r
70      */\r
71     public int previous() {\r
72         int i = iterator.previous();\r
73         if(i==CharacterIterator.DONE){\r
74             return DONE;\r
75         }\r
76         return i;\r
77     }\r
78 \r
79     /**\r
80      * @see UCharacterIterator#setIndex(int)\r
81      */\r
82     public void setIndex(int index) {\r
83         try{\r
84             iterator.setIndex(index);\r
85         }catch(IllegalArgumentException e){\r
86             throw new IndexOutOfBoundsException();\r
87         }\r
88     }\r
89 \r
90     /**\r
91      * @see UCharacterIterator#setToLimit()\r
92      */\r
93     public void setToLimit() {\r
94         iterator.setIndex(iterator.getEndIndex());\r
95     }\r
96 \r
97     /**\r
98      * @see UCharacterIterator#getText(char[])\r
99      */\r
100     public int getText(char[] fillIn, int offset){\r
101         int length =iterator.getEndIndex() - iterator.getBeginIndex(); \r
102         int currentIndex = iterator.getIndex();\r
103         if(offset < 0 || offset + length > fillIn.length){\r
104             throw new IndexOutOfBoundsException(Integer.toString(length));\r
105         }\r
106     \r
107         for (char ch = iterator.first(); ch != CharacterIterator.DONE; ch = iterator.next()) {\r
108             fillIn[offset++] = ch;\r
109         }\r
110         iterator.setIndex(currentIndex);\r
111 \r
112         return length;\r
113     }\r
114 \r
115     /**\r
116      * Creates a clone of this iterator.  Clones the underlying character iterator.\r
117      * @see UCharacterIterator#clone()\r
118      */\r
119     public Object clone(){\r
120         try {\r
121             CharacterIteratorWrapper result = (CharacterIteratorWrapper) super.clone();\r
122             result.iterator = (CharacterIterator)this.iterator.clone();\r
123             return result;\r
124         } catch (CloneNotSupportedException e) {      \r
125             return null; // only invoked if bad underlying character iterator\r
126         }\r
127     }\r
128     \r
129 \r
130     public int moveIndex(int delta){\r
131         int length = iterator.getEndIndex() - iterator.getBeginIndex(); \r
132         int idx = iterator.getIndex()+delta;\r
133         \r
134         if(idx < 0) {\r
135             idx = 0;\r
136         } else if(idx > length) {\r
137             idx = length;\r
138         }\r
139         return iterator.setIndex(idx);\r
140     }\r
141     \r
142     /**\r
143      * @see UCharacterIterator#getCharacterIterator()\r
144      */\r
145     public CharacterIterator getCharacterIterator(){\r
146         return (CharacterIterator)iterator.clone();\r
147     } \r
148 }\r