From 666ff4f65d256dec0974941605cf76db0b138a76 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 5 Mar 2007 17:27:44 +0000 Subject: [PATCH] Character.java: Re-merged with Classpath. 2007-03-05 Mark Wielaard * java/lang/Character.java: Re-merged with Classpath. * java/lang/natString.cc (nativeCompareTo): Renamed from compareTo. * java/lang/StringBuilder.java: Re-merged with Classpath. * java/lang/String.java: Re-merged with Classpath. (nativeCompareTo): Renamed from compareTo. * java/lang/StringBuffer.java: Re-merged with Classpath. * jni.cc (_Jv_JNI_GetAnyMethodID): Split calls to append. From-SVN: r122560 --- libjava/ChangeLog | 11 + .../lib/java/lang/Character$Subset.class | Bin 795 -> 795 bytes .../Character$UnicodeBlock$NameType.class | Bin 0 -> 1270 bytes .../java/lang/Character$UnicodeBlock.class | Bin 17734 -> 18175 bytes .../classpath/lib/java/lang/Character.class | Bin 11431 -> 13096 bytes .../String$CaseInsensitiveComparator.class | Bin 743 -> 953 bytes libjava/classpath/lib/java/lang/String.class | Bin 9041 -> 10265 bytes .../lib/java/lang/StringBuffer.class | Bin 10367 -> 10783 bytes .../lib/java/lang/StringBuilder.class | Bin 9663 -> 10292 bytes .../lang/Character$UnicodeBlock$NameType.h | 29 ++ libjava/java/lang/Character$UnicodeBlock.h | 6 +- libjava/java/lang/Character.h | 26 +- libjava/java/lang/Character.java | 448 ++++++++++++------ .../lang/String$CaseInsensitiveComparator.h | 1 + libjava/java/lang/String.h | 13 +- libjava/java/lang/String.java | 120 +++-- libjava/java/lang/StringBuffer.h | 13 +- libjava/java/lang/StringBuffer.java | 116 ++--- libjava/java/lang/StringBuilder.h | 4 + libjava/java/lang/StringBuilder.java | 63 ++- libjava/java/lang/natString.cc | 2 +- libjava/jni.cc | 3 +- 22 files changed, 609 insertions(+), 246 deletions(-) create mode 100644 libjava/classpath/lib/java/lang/Character$UnicodeBlock$NameType.class create mode 100644 libjava/java/lang/Character$UnicodeBlock$NameType.h diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 2b4f38be8e33..6de135a543ed 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,14 @@ +2007-03-05 Mark Wielaard + + * java/lang/Character.java: Re-merged with Classpath. + * java/lang/natString.cc (nativeCompareTo): Renamed from + compareTo. + * java/lang/StringBuilder.java: Re-merged with Classpath. + * java/lang/String.java: Re-merged with Classpath. + (nativeCompareTo): Renamed from compareTo. + * java/lang/StringBuffer.java: Re-merged with Classpath. + * jni.cc (_Jv_JNI_GetAnyMethodID): Split calls to append. + 2007-03-05 Andrew Haley * java/lang/reflect/natVMProxy.cc (ncode_closure.meth): Delete. diff --git a/libjava/classpath/lib/java/lang/Character$Subset.class b/libjava/classpath/lib/java/lang/Character$Subset.class index 5a928021d654142b8342a8d0bc8994fe48532204..d37116643712881e7dde77675d5f3fa9ea0f6038 100644 GIT binary patch delta 39 vcmbQuHk)mOI1^_I0}Des0}n&SWCbQK#*)d|Om2+zlQ%KhFm_IU&!htYxmF5K delta 39 vcmbQuHk)mOI1^_Q0}Dec0}n&mWCbQK#-hpDOm2*|lQ%KhFt$&A&!htYxN-_Z diff --git a/libjava/classpath/lib/java/lang/Character$UnicodeBlock$NameType.class b/libjava/classpath/lib/java/lang/Character$UnicodeBlock$NameType.class new file mode 100644 index 0000000000000000000000000000000000000000..3f341aaa55097867bf35f737bbcae20d62e6d05a GIT binary patch literal 1270 zcmb7DQBTuQ7(JJ6>ozLj(CGjbb?P<{mmHagLJSi_`li!qGQ`x9R@KUCslu>O8J=DsR-j6)`cZ#h zQa5#ms9M$ZT1l%hjBje&Tj_eKvMml4KU_*PS~P6SvAlH#DU+=;gjDJyif|kZQwpvk z!4N6-DalMgT=!hd*)5c_^%!xlDF`DHg)G1g1+oB90cI3L5fNW=3Sx*eOjaz%)H=-_ z)2;Cx+hj;oS_Zf4+_ePuH{*~nMSi?Jt4$UTx!p18V=0rpOowr#@leJCYGycUz1#N8 zrh-Sv&{VnW@~+W3=rZJj{Z)7NO~Wgc11+CzQO^vrZ>jp3;dQXAKbCBu?4rL`w7RGu zi^mMBK`qth?RFucG(udYioy}sTOHRh-&$gv6N4LOzQmowWko-oW0$1xzE zi?NJn4AUc6q!x@jW$`TVG)&#vb-34Y$;7LGZ(*_+z@x7myqv;%VPk~?BhkAHZKOo9 z09q+j{z`cQre;K%1cUN54u$wv2yuT8DE$O$BqpR|Odes{2iHSBNc!Mr*axY|FXBl( zOzVwM4@tcd?jfZgVfH(Tjo}vkMo1d?irfB<*rjLDzb;QEg-toPFn5eQql<($qF`S5 zCf9dyuV21Ky@~Q<53`MTQtq@-6n?g(*%RDf{6;513v6H^Mrq0QHFCre`tbzIonYZN h*#GM!Ecu$tSfMpRm3chHDpI77$J)jWp8Mx7{s9Y{B@6%n literal 0 HcmV?d00001 diff --git a/libjava/classpath/lib/java/lang/Character$UnicodeBlock.class b/libjava/classpath/lib/java/lang/Character$UnicodeBlock.class index fddba6abbb1250701ad9e54116591a59abedc7a3..e339e2be66186e6d00a81143ee555d8ed67f86b9 100644 GIT binary patch literal 18175 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 H4)67UN8%re literal 17734 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 diff --git a/libjava/classpath/lib/java/lang/Character.class b/libjava/classpath/lib/java/lang/Character.class index 3d41ebef22d3e1ca130b15a15ae1661939eaaf7a..68f96fbda0f98e40b6da34babb2e64c7e116b9fe 100644 GIT binary patch literal 13096 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 bn-RqoqDS=N>cL$EM>D)oh)ZydQ~jR+W0~%w diff --git a/libjava/classpath/lib/java/lang/String$CaseInsensitiveComparator.class b/libjava/classpath/lib/java/lang/String$CaseInsensitiveComparator.class index ffb4541d2933c68f3624126be835b411c63d481f..3a0450c2ab7529676591774fb8da32f0520af5ef 100644 GIT binary patch delta 379 zcmaFPx|5yj)W2Q(7#J7~8MHTYIWU?9mlS2@rCa-CC6*=X=OpH(>qA8}J-Ha97-ZNP zq!}3m&}An#FuL(T6*4j~`|<6AMHbttU$`$ulxfwqVk#?_dxCx|j!O zIs*eMgD8U-kY)r~10)52Y!?P524*15rmeG$L2?a{#l#>C;)8X}0P9wOsDSDQ$;mS) zfaTd36oD)z0Y{*TN>CGZfvQ0!@@i=xU~rbwIlv&bjX@dRWJa*bOh9$a460yT)fm)) RG$b delta 190 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 D1#Y%x literal 9041 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ܮZHvh@vU|z_-(@~5df1AX8k%iM_ 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 MgU9up;0^nK0o=Hl4gdfE diff --git a/libjava/classpath/lib/java/lang/StringBuilder.class b/libjava/classpath/lib/java/lang/StringBuilder.class index 8636b53aa5d7f5f01f192311c01d8765fae30fcb..90e6fab2565cd49207f3fed26af29f48a8891739 100644 GIT binary patch delta 819 zcmaKq&2JJx7{;G>89ro}Ep!b~mRdk56->1Cq!)rc5qrRoG-)-_S}<;`kW{LP7Y@dQ z2Tyx4p8Pm+X{xEjx*yN*Rl_d65xf&Ori;bXMZ!>Daj9~*wp@{_9~$;cJZ9YC^uh#3kuJH>>5%g57`dBG%Kco7u7fsj}~ zB-Rhv$LAjN3%KP?DIoG7(qp^NPVzl7l1Mha z^#-G|-gM8%r7L&SC6^uKv$+pQt@dA|%PgYlHw%BMS9>>GCc+Z26>`-MZ>#C4Bx!?N&SxHHD2e6C=2{f66Y0?;4gE)DwkXJ|5&k!6SR#_~2hw1Q AH2?qr delta 184 zcmdlIu-{wY)W2Q(7#J7~8UC>|FflTSPYz@g->4qM!(^l}IeD715ILKU}X3*xk24Xk>MM% v5Q79zQVl4=1f +#include + + +class java::lang::Character$UnicodeBlock$NameType : public ::java::lang::Enum +{ + + Character$UnicodeBlock$NameType(::java::lang::String *, jint); +public: + static JArray< ::java::lang::Character$UnicodeBlock$NameType * > * values(); + static ::java::lang::Character$UnicodeBlock$NameType * valueOf(::java::lang::String *); + static ::java::lang::Character$UnicodeBlock$NameType * CANONICAL; + static ::java::lang::Character$UnicodeBlock$NameType * NO_SPACES; + static ::java::lang::Character$UnicodeBlock$NameType * CONSTANT; +private: + static JArray< ::java::lang::Character$UnicodeBlock$NameType * > * ENUM$VALUES; +public: + static ::java::lang::Class class$; +}; + +#endif // __java_lang_Character$UnicodeBlock$NameType__ diff --git a/libjava/java/lang/Character$UnicodeBlock.h b/libjava/java/lang/Character$UnicodeBlock.h index 43fa6b447e35..b32f2121e61b 100644 --- a/libjava/java/lang/Character$UnicodeBlock.h +++ b/libjava/java/lang/Character$UnicodeBlock.h @@ -18,13 +18,12 @@ public: static ::java::lang::Character$UnicodeBlock * of(jchar); static ::java::lang::Character$UnicodeBlock * of(jint); static ::java::lang::Character$UnicodeBlock * forName(::java::lang::String *); +public: // actually package-private + static JArray< jint > * $SWITCH_TABLE$java$lang$Character$UnicodeBlock$NameType(); private: jint __attribute__((aligned(__alignof__( ::java::lang::Character$Subset)))) start; jint end; ::java::lang::String * canonicalName; - static const jint CANONICAL_NAME = 0; - static const jint NO_SPACES_NAME = 1; - static const jint CONSTANT_NAME = 2; public: static ::java::lang::Character$UnicodeBlock * BASIC_LATIN; static ::java::lang::Character$UnicodeBlock * LATIN_1_SUPPLEMENT; @@ -154,6 +153,7 @@ public: static ::java::lang::Character$UnicodeBlock * SURROGATES_AREA; private: static JArray< ::java::lang::Character$UnicodeBlock * > * sets; + static JArray< jint > * $SWITCH_TABLE$java$lang$Character$UnicodeBlock$NameType__; public: static ::java::lang::Class class$; }; diff --git a/libjava/java/lang/Character.h b/libjava/java/lang/Character.h index ed913ab7c7e2..7c3a4b9ae3fc 100644 --- a/libjava/java/lang/Character.h +++ b/libjava/java/lang/Character.h @@ -34,6 +34,10 @@ public: static jboolean isDefined(jint); static jboolean isLetter(jchar); static jboolean isLetter(jint); + static jint offsetByCodePoints(::java::lang::CharSequence *, jint, jint); + static jint offsetByCodePoints(JArray< jchar > *, jint, jint, jint, jint); + static jint codePointCount(::java::lang::CharSequence *, jint, jint); + static jint codePointCount(JArray< jchar > *, jint, jint); static jboolean isLetterOrDigit(jchar); static jboolean isLetterOrDigit(jint); static jboolean isJavaLetter(jchar); @@ -72,8 +76,7 @@ public: static jbyte getDirectionality(jint); static jboolean isMirrored(jchar); static jboolean isMirrored(jint); - jint compareTo(::java::lang::Character *); - jint compareTo(::java::lang::Object *); + jint target$compareTo(::java::lang::Character *); static ::java::lang::Character * valueOf(jchar); static jchar reverseBytes(jchar); static JArray< jchar > * toChars(jint); @@ -91,6 +94,7 @@ public: static jint codePointBefore(JArray< jchar > *, jint); static jint codePointBefore(JArray< jchar > *, jint, jint); static jint codePointBefore(::java::lang::CharSequence *, jint); + jint compareTo(::java::lang::Object *); private: jchar __attribute__((aligned(__alignof__( ::java::lang::Object)))) value; static const jlong serialVersionUID = 3786198910865385080LL; @@ -99,6 +103,15 @@ public: static const jint MAX_RADIX = 36; static const jchar MIN_VALUE = 0; static const jchar MAX_VALUE = 65535; + static const jint MIN_CODE_POINT = 0; + static const jint MAX_CODE_POINT = 1114111; + static const jchar MIN_HIGH_SURROGATE = 55296; + static const jchar MAX_HIGH_SURROGATE = 56319; + static const jchar MIN_LOW_SURROGATE = 56320; + static const jchar MAX_LOW_SURROGATE = 57343; + static const jchar MIN_SURROGATE = 55296; + static const jchar MAX_SURROGATE = 57343; + static const jint MIN_SUPPLEMENTARY_CODE_POINT = 65536; static ::java::lang::Class * TYPE; static const jint SIZE = 16; private: @@ -160,15 +173,6 @@ private: static const jint NO_BREAK_MASK = 32; static const jint MIRROR_MASK = 64; public: - static const jint MIN_SUPPLEMENTARY_CODE_POINT = 65536; - static const jint MIN_CODE_POINT = 0; - static const jint MAX_CODE_POINT = 1114111; - static const jchar MIN_HIGH_SURROGATE = 55296; - static const jchar MAX_HIGH_SURROGATE = 56319; - static const jchar MIN_LOW_SURROGATE = 56320; - static const jchar MAX_LOW_SURROGATE = 57343; - static const jchar MIN_SURROGATE = 55296; - static const jchar MAX_SURROGATE = 57343; static ::java::lang::Class class$; }; diff --git a/libjava/java/lang/Character.java b/libjava/java/lang/Character.java index ec6d2a4af144..0cc9d3c57bdc 100644 --- a/libjava/java/lang/Character.java +++ b/libjava/java/lang/Character.java @@ -1,5 +1,6 @@ /* java.lang.Character -- Wrapper class for char, and Unicode subsets - Copyright (C) 1998, 1999, 2001, 2002, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001, 2002, 2005, 2006, 2007 + Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -54,7 +55,7 @@ import java.util.Locale; /** * Wrapper class for the primitive char data type. In addition, this class * allows one to retrieve property information and perform transformations - * on the 57,707 defined characters in the Unicode Standard, Version 3.0.0. + * on the defined characters in the Unicode Standard, Version 4.0.0. * java.lang.Character is designed to be very dynamic, and as such, it * retrieves information on the Unicode character set from a separate * database, gnu.java.lang.CharData, which can be easily upgraded. @@ -62,7 +63,7 @@ import java.util.Locale; *

For predicates, boundaries are used to describe * the set of characters for which the method will return true. * This syntax uses fairly normal regular expression notation. - * See 5.13 of the Unicode Standard, Version 3.0, for the + * See 5.13 of the Unicode Standard, Version 4.0, for the * boundary specification. * *

See http://www.unicode.org @@ -72,10 +73,11 @@ import java.util.Locale; * @author Paul N. Fisher * @author Jochen Hoenicke * @author Eric Blake (ebb9@email.byu.edu) + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) * @since 1.0 - * @status updated to 1.4 + * @status partly updated to 1.5; some things still missing */ -public final class Character implements Serializable, Comparable +public final class Character implements Serializable, Comparable { /** * A subset of Unicode blocks. @@ -160,10 +162,8 @@ public final class Character implements Serializable, Comparable /** The canonical name of the block according to the Unicode standard. */ private final String canonicalName; - /** Constants for the forName() method */ - private static final int CANONICAL_NAME = 0; - private static final int NO_SPACES_NAME = 1; - private static final int CONSTANT_NAME = 2; + /** Enumeration for the forName() method */ + private enum NameType { CANONICAL, NO_SPACES, CONSTANT; }; /** * Constructor for strictly defined blocks. @@ -173,7 +173,7 @@ public final class Character implements Serializable, Comparable * @param name the block name */ private UnicodeBlock(int start, int end, String name, - String canonicalName) + String canonicalName) { super(name); this.start = start; @@ -207,8 +207,8 @@ public final class Character implements Serializable, Comparable public static UnicodeBlock of(int codePoint) { if (codePoint > MAX_CODE_POINT) - throw new IllegalArgumentException("The supplied integer value is " + - "too large to be a codepoint."); + throw new IllegalArgumentException("The supplied integer value is " + + "too large to be a codepoint."); // Simple binary search for the correct block. int low = 0; int hi = sets.length - 1; @@ -262,59 +262,51 @@ public final class Character implements Serializable, Comparable */ public static final UnicodeBlock forName(String blockName) { - int type; + NameType type; if (blockName.indexOf(' ') != -1) - type = CANONICAL_NAME; + type = NameType.CANONICAL; else if (blockName.indexOf('_') != -1) - type = CONSTANT_NAME; + type = NameType.CONSTANT; else - type = NO_SPACES_NAME; + type = NameType.NO_SPACES; Collator usCollator = Collator.getInstance(Locale.US); usCollator.setStrength(Collator.PRIMARY); /* Special case for deprecated blocks not in sets */ switch (type) { - case CANONICAL_NAME: + case CANONICAL: if (usCollator.compare(blockName, "Surrogates Area") == 0) return SURROGATES_AREA; break; - case NO_SPACES_NAME: + case NO_SPACES: if (usCollator.compare(blockName, "SurrogatesArea") == 0) return SURROGATES_AREA; break; - case CONSTANT_NAME: + case CONSTANT: if (usCollator.compare(blockName, "SURROGATES_AREA") == 0) return SURROGATES_AREA; break; } /* Other cases */ - int setLength = sets.length; switch (type) { - case CANONICAL_NAME: - for (int i = 0; i < setLength; i++) - { - UnicodeBlock block = sets[i]; - if (usCollator.compare(blockName, block.canonicalName) == 0) - return block; - } + case CANONICAL: + for (UnicodeBlock block : sets) + if (usCollator.compare(blockName, block.canonicalName) == 0) + return block; break; - case NO_SPACES_NAME: - for (int i = 0; i < setLength; i++) - { - UnicodeBlock block = sets[i]; - String nsName = block.canonicalName.replaceAll(" ",""); - if (usCollator.compare(blockName, nsName) == 0) - return block; - } - break; - case CONSTANT_NAME: - for (int i = 0; i < setLength; i++) - { - UnicodeBlock block = sets[i]; - if (usCollator.compare(blockName, block.toString()) == 0) - return block; - } + case NO_SPACES: + for (UnicodeBlock block : sets) + { + String nsName = block.canonicalName.replaceAll(" ",""); + if (usCollator.compare(blockName, nsName) == 0) + return block; + } + break; + case CONSTANT: + for (UnicodeBlock block : sets) + if (usCollator.compare(blockName, block.toString()) == 0) + return block; break; } throw new IllegalArgumentException("No Unicode block found for " + @@ -1517,10 +1509,11 @@ public final class Character implements Serializable, Comparable * this. These are also returned from calls to of(int) * and of(char). */ + @Deprecated public static final UnicodeBlock SURROGATES_AREA = new UnicodeBlock(0xD800, 0xDFFF, "SURROGATES_AREA", - "Surrogates Area"); + "Surrogates Area"); /** * The defined subsets. @@ -1698,12 +1691,79 @@ public final class Character implements Serializable, Comparable */ public static final char MAX_VALUE = '\uFFFF'; + /** + * The minimum Unicode 4.0 code point. This value is 0. + * @since 1.5 + */ + public static final int MIN_CODE_POINT = 0; + + /** + * The maximum Unicode 4.0 code point, which is greater than the range + * of the char data type. + * This value is 0x10FFFF. + * @since 1.5 + */ + public static final int MAX_CODE_POINT = 0x10FFFF; + + /** + * The minimum Unicode high surrogate code unit, or + * leading-surrogate, in the UTF-16 character encoding. + * This value is '\uD800'. + * @since 1.5 + */ + public static final char MIN_HIGH_SURROGATE = '\uD800'; + + /** + * The maximum Unicode high surrogate code unit, or + * leading-surrogate, in the UTF-16 character encoding. + * This value is '\uDBFF'. + * @since 1.5 + */ + public static final char MAX_HIGH_SURROGATE = '\uDBFF'; + + /** + * The minimum Unicode low surrogate code unit, or + * trailing-surrogate, in the UTF-16 character encoding. + * This value is '\uDC00'. + * @since 1.5 + */ + public static final char MIN_LOW_SURROGATE = '\uDC00'; + + /** + * The maximum Unicode low surrogate code unit, or + * trailing-surrogate, in the UTF-16 character encoding. + * This value is '\uDFFF'. + * @since 1.5 + */ + public static final char MAX_LOW_SURROGATE = '\uDFFF'; + + /** + * The minimum Unicode surrogate code unit in the UTF-16 character encoding. + * This value is '\uD800'. + * @since 1.5 + */ + public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE; + + /** + * The maximum Unicode surrogate code unit in the UTF-16 character encoding. + * This value is '\uDFFF'. + * @since 1.5 + */ + public static final char MAX_SURROGATE = MAX_LOW_SURROGATE; + + /** + * The lowest possible supplementary Unicode code point (the first code + * point outside the basic multilingual plane (BMP)). + * This value is 0x10000. + */ + public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x10000; + /** * Class object representing the primitive char data type. * * @since 1.1 */ - public static final Class TYPE = VMClassLoader.getPrimitiveClass('C'); + public static final Class TYPE = (Class) VMClassLoader.getPrimitiveClass('C'); /** * The number of bits needed to represent a char. @@ -2088,71 +2148,6 @@ public final class Character implements Serializable, Comparable */ private static final int MIRROR_MASK = 0x40; - /** - * Min value for supplementary code point. - * - * @since 1.5 - */ - public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x10000; - - /** - * Min value for code point. - * - * @since 1.5 - */ - public static final int MIN_CODE_POINT = 0; - - - /** - * Max value for code point. - * - * @since 1.5 - */ - public static final int MAX_CODE_POINT = 0x010ffff; - - - /** - * Minimum high surrogate code in UTF-16 encoding. - * - * @since 1.5 - */ - public static final char MIN_HIGH_SURROGATE = '\ud800'; - - /** - * Maximum high surrogate code in UTF-16 encoding. - * - * @since 1.5 - */ - public static final char MAX_HIGH_SURROGATE = '\udbff'; - - /** - * Minimum low surrogate code in UTF-16 encoding. - * - * @since 1.5 - */ - public static final char MIN_LOW_SURROGATE = '\udc00'; - - /** - * Maximum low surrogate code in UTF-16 encoding. - * - * @since 1.5 - */ - public static final char MAX_LOW_SURROGATE = '\udfff'; - - /** - * Minimum surrogate code in UTF-16 encoding. - * - * @since 1.5 - */ - public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE; - - /** - * Maximum low surrogate code in UTF-16 encoding. - * - * @since 1.5 - */ - public static final char MAX_SURROGATE = MAX_LOW_SURROGATE; - /** * Grabs an attribute offset from the Unicode attribute database. The lower * 5 bits are the character type, the next 2 bits are flags, and the top @@ -2504,6 +2499,209 @@ public final class Character implements Serializable, Comparable | (1 << MODIFIER_LETTER) | (1 << OTHER_LETTER))) != 0; } + + /** + * Returns the index into the given CharSequence that is offset + * codePointOffset code points from index. + * @param seq the CharSequence + * @param index the start position in the CharSequence + * @param codePointOffset the number of code points offset from the start + * position + * @return the index into the CharSequence that is codePointOffset code + * points offset from index + * + * @throws NullPointerException if seq is null + * @throws IndexOutOfBoundsException if index is negative or greater than the + * length of the sequence. + * @throws IndexOutOfBoundsException if codePointOffset is positive and the + * subsequence from index to the end of seq has fewer than codePointOffset + * code points + * @throws IndexOutOfBoundsException if codePointOffset is negative and the + * subsequence from the start of seq to index has fewer than + * (-codePointOffset) code points + * @since 1.5 + */ + public static int offsetByCodePoints(CharSequence seq, + int index, + int codePointOffset) + { + int len = seq.length(); + if (index < 0 || index > len) + throw new IndexOutOfBoundsException(); + + int numToGo = codePointOffset; + int offset = index; + int adjust = 1; + if (numToGo >= 0) + { + for (; numToGo > 0; offset++) + { + numToGo--; + if (Character.isHighSurrogate(seq.charAt(offset)) + && (offset + 1) < len + && Character.isLowSurrogate(seq.charAt(offset + 1))) + offset++; + } + return offset; + } + else + { + numToGo *= -1; + for (; numToGo > 0;) + { + numToGo--; + offset--; + if (Character.isLowSurrogate(seq.charAt(offset)) + && (offset - 1) >= 0 + && Character.isHighSurrogate(seq.charAt(offset - 1))) + offset--; + } + return offset; + } + } + + /** + * Returns the index into the given char subarray that is offset + * codePointOffset code points from index. + * @param a the char array + * @param start the start index of the subarray + * @param count the length of the subarray + * @param index the index to be offset + * @param codePointOffset the number of code points offset from index + * + * @return the index into the char array + * + * @throws NullPointerException if a is null + * @throws IndexOutOfBoundsException if start or count is negative or if + * start + count is greater than the length of the array + * @throws IndexOutOfBoundsException if index is less than start or larger + * than start + count + * @throws IndexOutOfBoundsException if codePointOffset is positive and the + * subarray from index to start + count - 1 has fewer than codePointOffset + * code points. + * @throws IndexOutOfBoundsException if codePointOffset is negative and the + * subarray from start to index - 1 has fewer than (-codePointOffset) code + * points + * @since 1.5 + + */ + public static int offsetByCodePoints(char[] a, + int start, + int count, + int index, + int codePointOffset) + { + int len = a.length; + int end = start + count; + if (start < 0 || count < 0 || end > len || index < start || index > end) + throw new IndexOutOfBoundsException(); + + int numToGo = codePointOffset; + int offset = index; + int adjust = 1; + if (numToGo >= 0) + { + for (; numToGo > 0; offset++) + { + numToGo--; + if (Character.isHighSurrogate(a[offset]) + && (offset + 1) < len + && Character.isLowSurrogate(a[offset + 1])) + offset++; + } + return offset; + } + else + { + numToGo *= -1; + for (; numToGo > 0;) + { + numToGo--; + offset--; + if (Character.isLowSurrogate(a[offset]) + && (offset - 1) >= 0 + && Character.isHighSurrogate(a[offset - 1])) + offset--; + if (offset < start) + throw new IndexOutOfBoundsException(); + } + return offset; + } + + } + + /** + * Returns the number of Unicode code points in the specified range of the + * given CharSequence. The first char in the range is at position + * beginIndex and the last one is at position endIndex - 1. Paired + * surrogates (supplementary characters are represented by a pair of chars - + * one from the high surrogates and one from the low surrogates) + * count as just one code point. + * @param seq the CharSequence to inspect + * @param beginIndex the beginning of the range + * @param endIndex the end of the range + * @return the number of Unicode code points in the given range of the + * sequence + * @throws NullPointerException if seq is null + * @throws IndexOutOfBoundsException if beginIndex is negative, endIndex is + * larger than the length of seq, or if beginIndex is greater than endIndex. + * @since 1.5 + */ + public static int codePointCount(CharSequence seq, int beginIndex, + int endIndex) + { + int len = seq.length(); + if (beginIndex < 0 || endIndex > len || beginIndex > endIndex) + throw new IndexOutOfBoundsException(); + + int count = 0; + for (int i = beginIndex; i < endIndex; i++) + { + count++; + // If there is a pairing, count it only once. + if (isHighSurrogate(seq.charAt(i)) && (i + 1) < endIndex + && isLowSurrogate(seq.charAt(i + 1))) + i ++; + } + return count; + } + + /** + * Returns the number of Unicode code points in the specified range of the + * given char array. The first char in the range is at position + * offset and the length of the range is count. Paired surrogates + * (supplementary characters are represented by a pair of chars - + * one from the high surrogates and one from the low surrogates) + * count as just one code point. + * @param a the char array to inspect + * @param offset the beginning of the range + * @param count the length of the range + * @return the number of Unicode code points in the given range of the + * array + * @throws NullPointerException if a is null + * @throws IndexOutOfBoundsException if offset or count is negative or if + * offset + countendIndex is larger than the length of a. + * @since 1.5 + */ + public static int codePointCount(char[] a, int offset, + int count) + { + int len = a.length; + int end = offset + count; + if (offset < 0 || count < 0 || end > len) + throw new IndexOutOfBoundsException(); + + int counter = 0; + for (int i = offset; i < end; i++) + { + counter++; + // If there is a pairing, count it only once. + if (isHighSurrogate(a[i]) && (i + 1) < end + && isLowSurrogate(a[i + 1])) + i ++; + } + return counter; + } /** * Determines if a character is a Unicode letter or a Unicode digit. This @@ -3496,23 +3694,6 @@ public final class Character implements Serializable, Comparable return value - anotherCharacter.value; } - /** - * Compares an object to this Character. Assuming the object is a - * Character object, this method performs the same comparison as - * compareTo(Character). - * - * @param o object to compare - * @return the comparison value - * @throws ClassCastException if o is not a Character object - * @throws NullPointerException if o is null - * @see #compareTo(Character) - * @since 1.2 - */ - public int compareTo(Object o) - { - return compareTo((Character) o); - } - /** * Returns an Character object wrapping the value. * In contrast to the Character constructor, this method @@ -3520,7 +3701,7 @@ public final class Character implements Serializable, Comparable * * @param val the value to wrap * @return the Character - * + * * @since 1.5 */ public static Character valueOf(char val) @@ -3529,9 +3710,9 @@ public final class Character implements Serializable, Comparable return new Character(val); synchronized (charCache) { - if (charCache[val - MIN_VALUE] == null) - charCache[val - MIN_VALUE] = new Character(val); - return charCache[val - MIN_VALUE]; + if (charCache[val - MIN_VALUE] == null) + charCache[val - MIN_VALUE] = new Character(val); + return charCache[val - MIN_VALUE]; } } @@ -3559,6 +3740,9 @@ public final class Character implements Serializable, Comparable */ public static char[] toChars(int codePoint) { + if (!isValidCodePoint(codePoint)) + throw new IllegalArgumentException("Illegal Unicode code point : " + + codePoint); char[] result = new char[charCount(codePoint)]; int ignore = toChars(codePoint, result, 0); return result; @@ -3776,7 +3960,7 @@ public final class Character implements Serializable, Comparable */ public static int codePointAt(char[] chars, int index, int limit) { - if (index < 0 || index >= limit || limit < 0 || limit >= chars.length) + if (index < 0 || index >= limit || limit < 0 || limit > chars.length) throw new IndexOutOfBoundsException(); char high = chars[index]; if (! isHighSurrogate(high) || ++index >= limit) diff --git a/libjava/java/lang/String$CaseInsensitiveComparator.h b/libjava/java/lang/String$CaseInsensitiveComparator.h index 11c0ea557b71..b0c3d620973f 100644 --- a/libjava/java/lang/String$CaseInsensitiveComparator.h +++ b/libjava/java/lang/String$CaseInsensitiveComparator.h @@ -14,6 +14,7 @@ class java::lang::String$CaseInsensitiveComparator : public ::java::lang::Object public: // actually package-private String$CaseInsensitiveComparator(); public: + jint target$compare(::java::lang::String *, ::java::lang::String *); jint compare(::java::lang::Object *, ::java::lang::Object *); private: static const jlong serialVersionUID = 8575799808933029326LL; diff --git a/libjava/java/lang/String.h b/libjava/java/lang/String.h index 44be2741c30c..eea80fb9e16c 100644 --- a/libjava/java/lang/String.h +++ b/libjava/java/lang/String.h @@ -62,8 +62,10 @@ public: jboolean contentEquals(::java::lang::StringBuffer *); jboolean contentEquals(::java::lang::CharSequence *); jboolean equalsIgnoreCase(::java::lang::String *); - jint compareTo(::java::lang::String *); - jint compareTo(::java::lang::Object *); + jint target$compareTo(::java::lang::String *); +private: + jint nativeCompareTo(::java::lang::String *); +public: jint compareToIgnoreCase(::java::lang::String *); jboolean regionMatches(jint, ::java::lang::String *, jint, jint); jboolean regionMatches(jboolean, jint, ::java::lang::String *, jint, jint); @@ -107,15 +109,22 @@ public: static ::java::lang::String * valueOf(jlong); static ::java::lang::String * valueOf(jfloat); static ::java::lang::String * valueOf(jdouble); + static ::java::lang::String * format(::java::util::Locale *, ::java::lang::String *, JArray< ::java::lang::Object * > *); + static ::java::lang::String * format(::java::lang::String *, JArray< ::java::lang::Object * > *); ::java::lang::String * intern(); jint codePointCount(jint, jint); jboolean contains(::java::lang::CharSequence *); ::java::lang::String * replace(::java::lang::CharSequence *, ::java::lang::CharSequence *); + jint offsetByCodePoints(jint, jint); + jboolean isEmpty(); private: void init(JArray< jchar > *, jint, jint, jboolean); void init(JArray< jbyte > *, jint, jint, jint); void init(JArray< jbyte > *, jint, jint, ::java::lang::String *); void init(::gnu::gcj::runtime::StringBuffer *); +public: + jint compareTo(::java::lang::Object *); +private: static const jlong serialVersionUID = -6849794470754667710LL; ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) data; jint boffset; diff --git a/libjava/java/lang/String.java b/libjava/java/lang/String.java index bd75797a2b1a..d5bb41502112 100644 --- a/libjava/java/lang/String.java +++ b/libjava/java/lang/String.java @@ -1,5 +1,5 @@ /* String.java -- immutable character sequences; the object of string literals - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -41,9 +41,11 @@ package java.lang; import java.io.Serializable; import java.io.UnsupportedEncodingException; -import java.lang.Comparable; import java.util.Comparator; +import java.text.Collator; +import java.util.Formatter; import java.util.Locale; +import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -70,10 +72,13 @@ import java.util.regex.PatternSyntaxException; * @author Paul N. Fisher * @author Eric Blake (ebb9@email.byu.edu) * @author Per Bothner (bothner@cygnus.com) + * @author Tom Tromey (tromey@redhat.com) + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) * @since 1.0 * @status updated to 1.4 */ -public final class String implements Serializable, Comparable, CharSequence +public final class String + implements Serializable, Comparable, CharSequence { // WARNING: String is a CORE class in the bootstrap cycle. See the comments // in vm/reference/java/lang/Runtime for implications of this fact. @@ -113,12 +118,12 @@ public final class String implements Serializable, Comparable, CharSequence private int cachedHashCode; /** - * An implementation for {@link CASE_INSENSITIVE_ORDER}. + * An implementation for {@link #CASE_INSENSITIVE_ORDER}. * This must be {@link Serializable}. The class name is dictated by * compatibility with Sun's JDK. */ private static final class CaseInsensitiveComparator - implements Comparator, Serializable + implements Comparator, Serializable { /** * Compatible with JDK 1.2. @@ -142,9 +147,9 @@ public final class String implements Serializable, Comparable, CharSequence * @throws ClassCastException if either argument is not a String * @see #compareToIgnoreCase(String) */ - public int compare(Object o1, Object o2) + public int compare(String o1, String o2) { - return ((String) o1).compareToIgnoreCase((String) o2); + return o1.compareToIgnoreCase(o2); } } // class CaseInsensitiveComparator @@ -156,7 +161,7 @@ public final class String implements Serializable, Comparable, CharSequence * @see Collator#compare(String, String) * @since 1.2 */ - public static final Comparator CASE_INSENSITIVE_ORDER + public static final Comparator CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator(); /** @@ -207,6 +212,7 @@ public final class String implements Serializable, Comparable, CharSequence * @param count the number of characters from data to copy * @throws NullPointerException if data is null * @throws IndexOutOfBoundsException if (offset < 0 || count < 0 + * || offset + count < 0 (overflow) * || offset + count > data.length) * (while unspecified, this is a StringIndexOutOfBoundsException) */ @@ -230,6 +236,7 @@ public final class String implements Serializable, Comparable, CharSequence * @param count the number of characters from ascii to copy * @throws NullPointerException if ascii is null * @throws IndexOutOfBoundsException if (offset < 0 || count < 0 + * || offset + count < 0 (overflow) * || offset + count > ascii.length) * (while unspecified, this is a StringIndexOutOfBoundsException) * @see #String(byte[]) @@ -281,7 +288,7 @@ public final class String implements Serializable, Comparable, CharSequence * * @param data byte array to copy * @param offset the offset to start at - * @param count the number of characters in the array to use + * @param count the number of bytes in the array to use * @param encoding the name of the encoding to use * @throws NullPointerException if data or encoding is null * @throws IndexOutOfBoundsException if offset or count is incorrect @@ -330,7 +337,7 @@ public final class String implements Serializable, Comparable, CharSequence * * @param data byte array to copy * @param offset the offset to start at - * @param count the number of characters in the array to use + * @param count the number of bytes in the array to use * @throws NullPointerException if data is null * @throws IndexOutOfBoundsException if offset or count is incorrect * @throws Error if the decoding fails @@ -644,23 +651,17 @@ public final class String implements Serializable, Comparable, CharSequence * @return the comparison * @throws NullPointerException if anotherString is null */ - public native int compareTo(String anotherString); + public int compareTo(String anotherString) + { + return nativeCompareTo(anotherString); + } /** - * Behaves like compareTo(java.lang.String) unless the Object - * is not a String. Then it throws a - * ClassCastException. - * - * @param o the object to compare against - * @return the comparison - * @throws NullPointerException if o is null - * @throws ClassCastException if o is not a String - * @since 1.2 + * The native implementation of compareTo(). Must be named different + * since cni doesn't understand the bridge method generated from + * the compareTo() method because of the Comparable interface. */ - public int compareTo(Object o) - { - return compareTo((String) o); - } + private native int nativeCompareTo(String anotherString); /** * Compares this String and another String (case insensitive). This @@ -710,7 +711,7 @@ public final class String implements Serializable, Comparable, CharSequence * @param ignoreCase true if case should be ignored in comparision * @param toffset index to start comparison at for this String * @param other String to compare region to this String - * @param oofset index to start comparison at for other + * @param ooffset index to start comparison at for other * @param len number of characters to compare * @return true if regions match, false otherwise * @throws NullPointerException if other is null @@ -1124,7 +1125,7 @@ public final class String implements Serializable, Comparable, CharSequence * Trims all characters less than or equal to '\u0020' * (' ') from the beginning and end of this String. This * includes many, but not all, ASCII control characters, and all - * {@link Character#whitespace(char)}. + * {@link Character#isWhitespace(char)}. * * @return new trimmed String, or this if nothing trimmed */ @@ -1204,6 +1205,7 @@ public final class String implements Serializable, Comparable, CharSequence * @return String containing the chars from data[offset..offset+count] * @throws NullPointerException if data is null * @throws IndexOutOfBoundsException if (offset < 0 || count < 0 + * || offset + count < 0 (overflow) * || offset + count > data.length) * (while unspecified, this is a StringIndexOutOfBoundsException) * @see #String(char[], int, int) @@ -1294,12 +1296,27 @@ public final class String implements Serializable, Comparable, CharSequence return Double.toString(d); } + + /** @since 1.5 */ + public static String format(Locale locale, String format, Object... args) + { + Formatter f = new Formatter(locale); + return f.format(format, args).toString(); + } + + /** @since 1.5 */ + public static String format(String format, Object... args) + { + return format(Locale.getDefault(), format, args); + } + /** - * Fetches this String from the intern hashtable. If two Strings are - * considered equal, by the equals() method, then intern() will return the - * same String instance. ie. if (s1.equals(s2)) then - * (s1.intern() == s2.intern()). All string literals and string-valued - * constant expressions are already interned. + * Fetches this String from the intern hashtable. + * If two Strings are considered equal, by the equals() method, + * then intern() will return the same String instance. ie. + * if (s1.equals(s2)) then (s1.intern() == s2.intern()). + * All string literals and string-valued constant expressions + * are already interned. * * @return the interned String */ @@ -1345,20 +1362,20 @@ public final class String implements Serializable, Comparable, CharSequence } return count; } - + /** * Returns true iff this String contains the sequence of Characters * described in s. * @param s the CharSequence * @return true iff this String contains s - * + * * @since 1.5 */ public boolean contains (CharSequence s) { return this.indexOf(s.toString()) != -1; } - + /** * Returns a string that is this string with all instances of the sequence * represented by target replaced by the sequence in @@ -1386,7 +1403,42 @@ public final class String implements Serializable, Comparable, CharSequence } return result.toString(); } + + /** + * Return the index into this String that is offset from the given index by + * codePointOffset code points. + * @param index the index at which to start + * @param codePointOffset the number of code points to offset + * @return the index into this String that is codePointOffset + * code points offset from index. + * + * @throws IndexOutOfBoundsException if index is negative or larger than the + * length of this string. + * @throws IndexOutOfBoundsException if codePointOffset is positive and the + * substring starting with index has fewer than codePointOffset code points. + * @throws IndexOutOfBoundsException if codePointOffset is negative and the + * substring ending with index has fewer than (-codePointOffset) code points. + * @since 1.5 + */ + public int offsetByCodePoints(int index, int codePointOffset) + { + if (index < 0 || index > count) + throw new IndexOutOfBoundsException(); + + return Character.offsetByCodePoints(this, index, codePointOffset); + } + /** + * Returns true if, and only if, {@link #length()} + * is 0. + * + * @return true if the length of the string is zero. + * @since 1.6 + */ + public boolean isEmpty() + { + return count == 0; + } private native void init(char[] chars, int offset, int count, boolean dont_copy); diff --git a/libjava/java/lang/StringBuffer.h b/libjava/java/lang/StringBuffer.h index 93951f471f6c..07400f78060e 100644 --- a/libjava/java/lang/StringBuffer.h +++ b/libjava/java/lang/StringBuffer.h @@ -30,13 +30,13 @@ public: ::java::lang::StringBuffer * append(::java::lang::Object *); ::java::lang::StringBuffer * append(::java::lang::String *); ::java::lang::StringBuffer * append(::java::lang::StringBuffer *); - ::java::lang::StringBuffer * append(::java::lang::CharSequence *); - ::java::lang::StringBuffer * append(::java::lang::CharSequence *, jint, jint); ::java::lang::StringBuffer * append(JArray< jchar > *); ::java::lang::StringBuffer * append(JArray< jchar > *, jint, jint); - ::java::lang::StringBuffer * append(jboolean); - ::java::lang::StringBuffer * append(jchar); ::java::lang::StringBuffer * appendCodePoint(jint); + ::java::lang::StringBuffer * append(jboolean); + ::java::lang::StringBuffer * target$append(jchar); + ::java::lang::StringBuffer * target$append(::java::lang::CharSequence *); + ::java::lang::StringBuffer * target$append(::java::lang::CharSequence *, jint, jint); ::java::lang::StringBuffer * append(jint); ::java::lang::StringBuffer * append(jlong); ::java::lang::StringBuffer * append(jfloat); @@ -71,6 +71,11 @@ public: private: void ensureCapacity_unsynchronized(jint); jboolean regionMatches(jint, ::java::lang::String *); +public: + ::java::lang::Appendable * append(::java::lang::CharSequence *, jint, jint); + ::java::lang::Appendable * append(::java::lang::CharSequence *); + ::java::lang::Appendable * append(jchar); +private: static const jlong serialVersionUID = 3388685877147921107LL; public: // actually package-private jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) count; diff --git a/libjava/java/lang/StringBuffer.java b/libjava/java/lang/StringBuffer.java index c3f112967c41..57fd2ca8e813 100644 --- a/libjava/java/lang/StringBuffer.java +++ b/libjava/java/lang/StringBuffer.java @@ -1,5 +1,5 @@ /* StringBuffer.java -- Growable strings - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -72,8 +72,12 @@ import java.io.Serializable; * @since 1.0 * @status updated to 1.4 */ -public final class StringBuffer implements Serializable, CharSequence +public final class StringBuffer + implements Serializable, CharSequence, Appendable { + // Implementation note: if you change this class, you usually will + // want to change StringBuilder as well. + /** * Compatible with JDK 1.0+. */ @@ -152,17 +156,16 @@ public final class StringBuffer implements Serializable, CharSequence * specified CharSequence. Initial capacity will be the * size of the CharSequence plus 16. * - * @param sequence the String to convert + * @param seq the String to convert * @throws NullPointerException if str is null - * * @since 1.5 */ - public StringBuffer(CharSequence sequence) + public StringBuffer(CharSequence seq) { - count = Math.max(0, sequence.length()); + count = Math.max(0, seq.length()); value = new char[count + DEFAULT_CAPACITY]; for (int i = 0; i < count; ++i) - value[i] = sequence.charAt(i); + value[i] = seq.charAt(i); } /** @@ -390,46 +393,6 @@ public final class StringBuffer implements Serializable, CharSequence return this; } - /** - * Append the CharSequence value of the argument to this - * StringBuffer. - * - * @param sequence the CharSequence to append - * @return this StringBuffer - * @see #append(Object) - * @since 1.5 - */ - public synchronized StringBuffer append(CharSequence sequence) - { - if (sequence == null) - sequence = "null"; - return append(sequence, 0, sequence.length()); - } - - /** - * Append the specified subsequence of the CharSequence - * argument to this StringBuffer. - * - * @param sequence the CharSequence to append - * @param start the starting index - * @param end one past the ending index - * @return this StringBuffer - * @see #append(Object) - * @since 1.5 - */ - public synchronized StringBuffer append(CharSequence sequence, - int start, int end) - { - if (sequence == null) - sequence = "null"; - if (start < 0 || end < 0 || start > end || end > sequence.length()) - throw new IndexOutOfBoundsException(); - ensureCapacity_unsynchronized(this.count + end - start); - for (int i = start; i < end; ++i) - value[count++] = sequence.charAt(i); - return this; - } - /** * Append the char array to this StringBuffer. * This is similar (but more efficient) than @@ -469,6 +432,25 @@ public final class StringBuffer implements Serializable, CharSequence return this; } + /** + * Append the code point to this StringBuffer. + * This is like #append(char), but will append two characters + * if a supplementary code point is given. + * + * @param code the code point to append + * @return this StringBuffer + * @see Character#toChars(int, char[], int) + * @since 1.5 + */ + public synchronized StringBuffer appendCodePoint(int code) + { + int len = Character.charCount(code); + ensureCapacity_unsynchronized(count + len); + Character.toChars(code, value, count); + count += len; + return this; + } + /** * Append the String value of the argument to this * StringBuffer. Uses String.valueOf() to convert @@ -497,21 +479,41 @@ public final class StringBuffer implements Serializable, CharSequence } /** - * Append the code point to this StringBuffer. - * This is like #append(char), but will append two characters - * if a supplementary code point is given. + * Append the CharSequence value of the argument to this + * StringBuffer. * - * @param code the code point to append + * @param seq the CharSequence to append * @return this StringBuffer - * @see Character#toChars(int, char[], int) + * @see #append(Object) * @since 1.5 */ - public synchronized StringBuffer appendCodePoint(int code) + public synchronized StringBuffer append(CharSequence seq) { - int len = Character.charCount(code); - ensureCapacity_unsynchronized(count + len); - Character.toChars(code, value, count); - count += len; + if (seq == null) + seq = "null"; + return append(seq, 0, seq.length()); + } + + /** + * Append the specified subsequence of the CharSequence + * argument to this StringBuffer. + * + * @param seq the CharSequence to append + * @param start the starting index + * @param end one past the ending index + * @return this StringBuffer + * @see #append(Object) + * @since 1.5 + */ + public synchronized StringBuffer append(CharSequence seq, int start, int end) + { + if (seq == null) + seq = "null"; + if (start < 0 || end < 0 || start > end || end > seq.length()) + throw new IndexOutOfBoundsException(); + ensureCapacity_unsynchronized(this.count + end - start); + for (int i = start; i < end; ++i) + value[count++] = seq.charAt(i); return this; } diff --git a/libjava/java/lang/StringBuilder.h b/libjava/java/lang/StringBuilder.h index d4912bf0cb43..d34cd86c0a62 100644 --- a/libjava/java/lang/StringBuilder.h +++ b/libjava/java/lang/StringBuilder.h @@ -66,6 +66,10 @@ public: private: jboolean regionMatches(jint, ::java::lang::String *); public: + jint codePointAt(jint); + jint codePointBefore(jint); + jint codePointCount(jint, jint); + void trimToSize(); ::java::lang::Appendable * append(::java::lang::CharSequence *, jint, jint); ::java::lang::Appendable * append(::java::lang::CharSequence *); ::java::lang::Appendable * append(jchar); diff --git a/libjava/java/lang/StringBuilder.java b/libjava/java/lang/StringBuilder.java index 5f33b2ed53ac..55a49e6e15d4 100644 --- a/libjava/java/lang/StringBuilder.java +++ b/libjava/java/lang/StringBuilder.java @@ -1,5 +1,5 @@ /* StringBuilder.java -- Unsynchronized growable strings - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -998,4 +998,65 @@ public final class StringBuilder */ // GCJ LOCAL: Native to access String internals properly. private native boolean regionMatches(int toffset, String other); + + /** + * Get the code point at the specified index. This is like #charAt(int), + * but if the character is the start of a surrogate pair, and the + * following character completes the pair, then the corresponding + * supplementary code point is returned. + * @param index the index of the codepoint to get, starting at 0 + * @return the codepoint at the specified index + * @throws IndexOutOfBoundsException if index is negative or >= length() + * @since 1.5 + */ + public int codePointAt(int index) + { + return Character.codePointAt(value, index, count); + } + + /** + * Get the code point before the specified index. This is like + * #codePointAt(int), but checks the characters at index-1 and + * index-2 to see if they form a supplementary code point. + * @param index the index just past the codepoint to get, starting at 0 + * @return the codepoint at the specified index + * @throws IndexOutOfBoundsException if index is negative or >= length() + * @since 1.5 + */ + public int codePointBefore(int index) + { + // Character.codePointBefore() doesn't perform this check. We + // could use the CharSequence overload, but this is just as easy. + if (index >= count) + throw new IndexOutOfBoundsException(); + return Character.codePointBefore(value, index, 1); + } + + /** + * Returns the number of Unicode code points in the specified sub sequence. + * Surrogate pairs count as one code point. + * @param beginIndex the start of the subarray + * @param endIndex the index after the last char in the subarray + * @return the number of code points + * @throws IndexOutOfBoundsException if beginIndex is less than zero or + * greater than endIndex or if endIndex is greater than the length of this + * StringBuilder + */ + public int codePointCount(int beginIndex,int endIndex) + { + if (beginIndex < 0 || beginIndex > endIndex || endIndex > count) + throw new IndexOutOfBoundsException("invalid indices: " + beginIndex + + ", " + endIndex); + return Character.codePointCount(value, beginIndex, endIndex - beginIndex); + } + + public void trimToSize() + { + if (count < value.length) + { + char[] newValue = new char[count]; + System.arraycopy(value, 0, newValue, 0, count); + value = newValue; + } + } } diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc index 1a49bf798097..f86abd8bc2da 100644 --- a/libjava/java/lang/natString.cc +++ b/libjava/java/lang/natString.cc @@ -707,7 +707,7 @@ java::lang::String::regionMatches (jint toffset, } jint -java::lang::String::compareTo (jstring anotherString) +java::lang::String::nativeCompareTo (jstring anotherString) { jchar *tptr = JvGetStringChars (this); jchar *optr = JvGetStringChars (anotherString); diff --git a/libjava/jni.cc b/libjava/jni.cc index d71b16d99eaf..9e33be6e69f9 100644 --- a/libjava/jni.cc +++ b/libjava/jni.cc @@ -751,7 +751,8 @@ _Jv_JNI_GetAnyMethodID (JNIEnv *env, jclass clazz, java::lang::StringBuffer *name_sig = new java::lang::StringBuffer (JvNewStringUTF (name)); - name_sig->append ((jchar) ' ')->append (JvNewStringUTF (s)); + name_sig->append ((jchar) ' '); + name_sig->append (JvNewStringUTF (s)); env->ex = new java::lang::NoSuchMethodError (name_sig->toString ()); } catch (jthrowable t)