1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License.  You may obtain a copy of the License at
8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.text;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An interface for the bidirectional iteration over a group of characters. The
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * iteration starts at the begin index in the group of characters and continues
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to one index before the end index.
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic interface CharacterIterator extends Cloneable {
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * A constant which indicates that there is no character at the current
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * index.
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final char DONE = '\uffff';
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a new {@code CharacterIterator} with the same properties.
35f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a shallow copy of this character iterator.
37f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see java.lang.Cloneable
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Object clone();
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the character at the current index.
44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the current character, or {@code DONE} if the current index is
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         past the beginning or end of the sequence.
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public char current();
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the current position to the begin index and returns the character at
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the new position.
53f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the character at the begin index.
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public char first();
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the begin index.
60f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the index of the first character of the iteration.
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getBeginIndex();
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the end index.
67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the index one past the last character of the iteration.
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getEndIndex();
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the current index.
74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the current index.
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getIndex();
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the current position to the end index - 1 and returns the character
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * at the new position.
82f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the character before the end index.
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public char last();
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Increments the current index and returns the character at the new index.
89f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the character at the next index, or {@code DONE} if the next
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         index would be past the end.
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public char next();
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Decrements the current index and returns the character at the new index.
97f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the character at the previous index, or {@code DONE} if the
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         previous index would be past the beginning.
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public char previous();
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the current index to a new position and returns the character at the
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * new index.
106f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param location
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the new index that this character iterator is set to.
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the character at the new index, or {@code DONE} if the index is
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         past the end.
1119b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     * @throws IllegalArgumentException
1129b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *         if {@code location} is less than the begin index or greater than
1139b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *         the end index.
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public char setIndex(int location);
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
117