aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/text/CollationKey.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/text/CollationKey.java')
-rw-r--r--libjava/java/text/CollationKey.java104
1 files changed, 104 insertions, 0 deletions
diff --git a/libjava/java/text/CollationKey.java b/libjava/java/text/CollationKey.java
new file mode 100644
index 00000000000..05a9932206f
--- /dev/null
+++ b/libjava/java/text/CollationKey.java
@@ -0,0 +1,104 @@
+// CollationKey.java - Sort key for locale-sensitive String.
+
+/* 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 March 25, 1999
+ */
+/* Written using "Java Class Libraries", 2nd edition, plus online
+ * API docs for JDK 1.2 from http://www.javasoft.com.
+ * Status: Believed complete and correct.
+ */
+
+public final class CollationKey
+{
+ public int compareTo (CollationKey target)
+ {
+ int max = Math.min(key.length, target.key.length);
+
+ for (int i = 0; i < max; ++i)
+ {
+ if (key[i] != target.key[i])
+ return key[i] - target.key[i];
+ }
+
+ return key.length - target.key.length;
+ }
+
+ public boolean equals (Object obj)
+ {
+ if (! (obj instanceof CollationKey))
+ return false;
+
+ CollationKey ck = (CollationKey) obj;
+
+ if (key.length != ck.key.length)
+ return false;
+
+ for (int i = 0; i < key.length; ++i)
+ if (key[i] != ck.key[i])
+ return false;
+
+ return true;
+ }
+
+ public String getSourceString ()
+ {
+ return originalText;
+ }
+
+ public int hashCode ()
+ {
+ // We just follow BitSet instead of thinking up something new.
+ long h = originalText.hashCode();
+ for (int i = key.length - 1; i >= 0; --i)
+ h ^= key[i] * (i + 1);
+ return (int) ((h >> 32) ^ h);
+ }
+
+ public byte[] toByteArray ()
+ {
+ byte[] r = new byte[4 * key.length];
+ int off = 0;
+ for (int i = 0; i < key.length; ++i)
+ {
+ r[off++] = (byte) ((key[i] >>> 24) & 255);
+ r[off++] = (byte) ((key[i] >>> 16) & 255);
+ r[off++] = (byte) ((key[i] >>> 8) & 255);
+ r[off++] = (byte) ((key[i] ) & 255);
+ }
+ return r;
+ }
+
+ CollationKey (CollationElementIterator iter, String originalText,
+ int strength)
+ {
+ this.originalText = originalText;
+
+ // Compute size of required array.
+ int size = 0;
+ while (RuleBasedCollator.next(iter, strength)
+ != CollationElementIterator.NULLORDER)
+ ++size;
+
+ iter.reset();
+ key = new int[size];
+ for (int i = 0; i < size; i++)
+ key[i] = RuleBasedCollator.next(iter, strength);
+ }
+
+ // Original string.
+ private String originalText;
+
+ // Collation key.
+ private int[] key;
+}