summaryrefslogtreecommitdiff
path: root/libjava/java/text/StringCharacterIterator.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/text/StringCharacterIterator.java')
-rw-r--r--libjava/java/text/StringCharacterIterator.java142
1 files changed, 142 insertions, 0 deletions
diff --git a/libjava/java/text/StringCharacterIterator.java b/libjava/java/text/StringCharacterIterator.java
new file mode 100644
index 00000000000..6eaa8e71cee
--- /dev/null
+++ b/libjava/java/text/StringCharacterIterator.java
@@ -0,0 +1,142 @@
+// StringCharacterIterator.java - Iterate over string of Unicode characters.
+
+/* Copyright (C) 1999 Cygnus Solutions
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+package java.text;
+
+/**
+ * @author Tom Tromey <tromey@cygnus.com>
+ * @date February 22, 1999
+ */
+/* Written using "Java Class Libraries", 2nd edition, plus online
+ * API docs for JDK 1.2 beta from http://www.javasoft.com.
+ * Status: Believed complete and correct to 1.1.
+ */
+
+public final class StringCharacterIterator implements CharacterIterator
+{
+ public Object clone ()
+ {
+ return (Object) new StringCharacterIterator (text, begin, end, pos);
+ }
+
+ public char current ()
+ {
+ // This follows JDK 1.2 semantics and not 1.1 semantics.
+ // In 1.1 we would throw an exception if begin==end.
+ return (pos < end) ? text.charAt(pos) : CharacterIterator.DONE;
+ }
+
+ public boolean equals (Object obj)
+ {
+ if (! (obj instanceof StringCharacterIterator))
+ return false;
+ StringCharacterIterator sci = (StringCharacterIterator) obj;
+ // The spec says "the same text". We take this to mean equals,
+ // not ==.
+ return (pos == sci.pos
+ && begin == sci.begin
+ && end == sci.end
+ && text.equals(sci.text));
+ }
+
+ public char first ()
+ {
+ pos = begin;
+ return current ();
+ }
+
+ public int getBeginIndex ()
+ {
+ return begin;
+ }
+
+ public int getEndIndex ()
+ {
+ return end;
+ }
+
+ public int getIndex ()
+ {
+ return pos;
+ }
+
+ public int hashCode ()
+ {
+ // FIXME: this is a terrible hash code. Find a better one.
+ return text.hashCode() + pos + begin + end;
+ }
+
+ public char last ()
+ {
+ pos = end;
+ return current ();
+ }
+
+ public char next ()
+ {
+ if (pos == end)
+ return CharacterIterator.DONE;
+ ++pos;
+ return current ();
+ }
+
+ public char previous ()
+ {
+ if (pos == begin)
+ return CharacterIterator.DONE;
+ --pos;
+ return current ();
+ }
+
+ public char setIndex (int idx)
+ {
+ // In 1.1 we would throw an error if `idx == end'.
+ if (idx < begin || idx > end)
+ throw new IllegalArgumentException ();
+ pos = idx;
+ return current ();
+ }
+
+ public StringCharacterIterator (String text)
+ {
+ // FIXME: remove check for null once we have compiler/runtime
+ // support for NullPointerException.
+ this (text, 0, text == null ? 0 : text.length(), 0);
+ }
+ public StringCharacterIterator (String text, int pos)
+ {
+ // FIXME: remove check for null once we have compiler/runtime
+ // support for NullPointerException.
+ this (text, 0, text == null ? 0 : text.length(), pos);
+ }
+ public StringCharacterIterator (String text, int begin, int end, int pos)
+ {
+ if (text == null)
+ throw new NullPointerException ();
+ if (begin < 0 || begin > end || end > text.length()
+ // In 1.1 we would also throw if `pos == end'.
+ || pos < begin || pos > end)
+ throw new IllegalArgumentException ();
+
+ this.text = text;
+ this.begin = begin;
+ this.end = end;
+ this.pos = pos;
+ }
+
+ // String to iterate over.
+ private String text;
+ // Current position.
+ private int pos;
+ // Start position in string.
+ private int begin;
+ // End position in string.
+ private int end;
+}