diff options
author | Tom Tromey <tromey@cygnus.com> | 1999-04-26 15:34:44 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 1999-04-26 15:34:44 +0000 |
commit | 3cc26081445329aec4d4711d69c0d86e05af841b (patch) | |
tree | a49553afea7d22437a2921c9b7915e6152eb4206 /libjava/java/text/CollationKey.java | |
parent | d5d9a8b6c3dce9425129aa7ee9bd5ab69ae27c2a (diff) | |
download | gcc-3cc26081445329aec4d4711d69c0d86e05af841b.zip gcc-3cc26081445329aec4d4711d69c0d86e05af841b.tar.gz gcc-3cc26081445329aec4d4711d69c0d86e05af841b.tar.bz2 |
GregorianCalendar.java (setDefaultTime): New method.
* java/util/GregorianCalendar.java (setDefaultTime): New method.
(GregorianCalendar): Use it in all constructors.
* java/util/Calendar.java (Calendar): Changed argument name to
`zone' to match code.
* gnu/gcj/text/LocaleData_en.java: Added collatorRule element.
* java/text/CollationKey.java: New file.
* java/text/CollationElementIterator.java: New file.
* java/text/Collator.java: New file.
* java/text/RuleBasedCollator.java: New file.
From-SVN: r26654
Diffstat (limited to 'libjava/java/text/CollationKey.java')
-rw-r--r-- | libjava/java/text/CollationKey.java | 104 |
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 0000000..05a9932 --- /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; +} |