aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/text
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>1999-04-30 09:31:00 +0000
committerTom Tromey <tromey@gcc.gnu.org>1999-04-30 09:31:00 +0000
commita0e894a8cc0344dbbefc57523ff53e990854fcfb (patch)
tree4928c712cce75c2d0d4c9cf9f6f78ef4a4052149 /libjava/java/text
parent1c609c4cbee4dd46a739fae213da8d48fe1147e4 (diff)
downloadgcc-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.java8
-rw-r--r--libjava/java/text/RuleBasedCollator.java31
-rw-r--r--libjava/java/text/natCollator.cc2
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)