diff options
author | Tom Tromey <tromey@cygnus.com> | 1999-04-30 09:31:00 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 1999-04-30 09:31:00 +0000 |
commit | a0e894a8cc0344dbbefc57523ff53e990854fcfb (patch) | |
tree | 4928c712cce75c2d0d4c9cf9f6f78ef4a4052149 /libjava/java/text | |
parent | 1c609c4cbee4dd46a739fae213da8d48fe1147e4 (diff) | |
download | gcc-a0e894a8cc0344dbbefc57523ff53e990854fcfb.zip gcc-a0e894a8cc0344dbbefc57523ff53e990854fcfb.tar.gz gcc-a0e894a8cc0344dbbefc57523ff53e990854fcfb.tar.bz2 |
StringBuffer.java (ensureCapacity): Don't resize vector when shared.
* java/lang/StringBuffer.java (ensureCapacity): Don't resize
vector when shared.
* java/util/Locale.java (Locale(String,String)): Implement in
terms of 3-argument version; variant now defaults to empty
string.
(toString): Assume variant is not null.
(equals): Assume all strings are not null.
(Locale): Throw NullPointerException if any argument is null.
* java/util/ResourceBundle.java (getBundle): Don't try the base
name; now implicit in partialGetBundle call.
(trySomeGetBundle): Search for parent bundles and call setParent
as required.
(partialGetBundle): Added `langStop' argument. Use
`Locale.toString' to compute bundleName.
(resource_cache): New static field.
(partialGetBundle): Cache the returned resource bundle. Now
synchronized.
* gnu/gcj/text/LocaleData_en.java (contents): [collatorRule] Added
missing `<'.
* mauve-libgcj: Enable Collator and RuleBasedCollator.
* java/text/natCollator.cc (decomposeCharacter): `base' now
`const'.
* Makefile.in: Rebuilt.
* Makefile.am (ordinary_java_source_files): Added
CollationElementIterator, CollationKey, Collator,
RuleBasedCollator.
(nat_source_files): Added natCollator.cc.
* java/text/RuleBasedCollator.java (ceiNext): No longer static.
(compare): Pass `this' to CollationElementIterator constructor.
(getCollationElementIterator): Likewise.
(ceiNext): Fix off-by-one error when finding initial substring.
(next): Correctly mask off bits when computing return value.
Fixed return values when one string is shorter than the other.
* java/text/CollationElementIterator.java (collator): New field.
(CollationElementIterator): Added collator argument.
(next): Call ceiNext on collator object.
From-SVN: r26707
Diffstat (limited to 'libjava/java/text')
-rw-r--r-- | libjava/java/text/CollationElementIterator.java | 8 | ||||
-rw-r--r-- | libjava/java/text/RuleBasedCollator.java | 31 | ||||
-rw-r--r-- | libjava/java/text/natCollator.cc | 2 |
3 files changed, 25 insertions, 16 deletions
diff --git a/libjava/java/text/CollationElementIterator.java b/libjava/java/text/CollationElementIterator.java index a654629..15e6056 100644 --- a/libjava/java/text/CollationElementIterator.java +++ b/libjava/java/text/CollationElementIterator.java @@ -27,7 +27,7 @@ public final class CollationElementIterator { if (index == text.length()) return NULLORDER; - return RuleBasedCollator.ceiNext(this); + return collator.ceiNext(this); } // This one returns int while the others return short. @@ -55,12 +55,13 @@ public final class CollationElementIterator } // Non-public constructor. - CollationElementIterator (String text) + CollationElementIterator (String text, RuleBasedCollator collator) { this.text = text; this.index = 0; this.lookahead_set = false; this.lookahead = 0; + this.collator = collator; } // Text over which we iterate. @@ -72,4 +73,7 @@ public final class CollationElementIterator // A piece of lookahead. boolean lookahead_set; int lookahead; + + // The RuleBasedCollator which created this object. + RuleBasedCollator collator; } diff --git a/libjava/java/text/RuleBasedCollator.java b/libjava/java/text/RuleBasedCollator.java index 18046ad..fd4002b 100644 --- a/libjava/java/text/RuleBasedCollator.java +++ b/libjava/java/text/RuleBasedCollator.java @@ -43,7 +43,7 @@ public class RuleBasedCollator extends Collator } // A helper for CollationElementIterator.next(). - static int ceiNext (CollationElementIterator cei) + int ceiNext (CollationElementIterator cei) { if (cei.lookahead_set) { @@ -61,7 +61,7 @@ public class RuleBasedCollator extends Collator boolean found = false; int i; - for (i = save; i < max; ++i) + for (i = save + 1; i <= max; ++i) { s = cei.text.substring(save, i); if (prefixes.get(s) == null) @@ -108,16 +108,15 @@ public class RuleBasedCollator extends Collator switch (strength) { case PRIMARY: - c |= CollationElementIterator.primaryOrder(os); - /* Fall through. */ + c = os & ~0xffff; + break; case SECONDARY: - c |= CollationElementIterator.secondaryOrder(os); - /* Fall through. */ - case TERTIARY: - c |= CollationElementIterator.tertiaryOrder(os); + c = os & ~0x00ff; break; + case TERTIARY: case IDENTICAL: c = os; + break; } if (c != 0) return c; @@ -128,8 +127,8 @@ public class RuleBasedCollator extends Collator { CollationElementIterator cs, ct; - cs = new CollationElementIterator (source); - ct = new CollationElementIterator (target); + cs = new CollationElementIterator (source, this); + ct = new CollationElementIterator (target, this); while (true) { @@ -140,9 +139,15 @@ public class RuleBasedCollator extends Collator && ot == CollationElementIterator.NULLORDER) break; else if (os == CollationElementIterator.NULLORDER) - return 1; + { + // Source string is shorter, so return "less than". + return -1; + } else if (ot == CollationElementIterator.NULLORDER) - return -1; + { + // Target string is shorter, so return "greater than". + return 1; + } if (os != ot) return os - ot; @@ -168,7 +173,7 @@ public class RuleBasedCollator extends Collator int max = source.length(); for (int i = 0; i < max; ++i) decomposeCharacter (source.charAt(i), expand); - return new CollationElementIterator (expand.toString()); + return new CollationElementIterator (expand.toString(), this); } public CollationKey getCollationKey (String source) diff --git a/libjava/java/text/natCollator.cc b/libjava/java/text/natCollator.cc index 7624b7c..378ac5c 100644 --- a/libjava/java/text/natCollator.cc +++ b/libjava/java/text/natCollator.cc @@ -30,7 +30,7 @@ java::text::Collator::decomposeCharacter (jchar c, return; } - struct decomp_entry *base; + const struct decomp_entry *base; int high; if (decmp == FULL_DECOMPOSITION) |