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
This commit is contained in:
Tom Tromey 1999-04-30 09:31:00 +00:00 committed by Tom Tromey
parent 1c609c4cbe
commit a0e894a8cc
11 changed files with 216 additions and 114 deletions

View file

@ -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;
}

View file

@ -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. */
case SECONDARY:
c |= CollationElementIterator.secondaryOrder(os);
/* Fall through. */
case TERTIARY:
c |= CollationElementIterator.tertiaryOrder(os);
c = os & ~0xffff;
break;
case SECONDARY:
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)

View file

@ -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)