diff options
| author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-03-30 06:43:45 +0000 |
|---|---|---|
| committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-03-30 06:43:45 +0000 |
| commit | a8159d5c75467e6c53f7ab51ef002a1e1ebcf1b8 (patch) | |
| tree | 2743db1170c10ebb6bc778029f9a50d57990a31e /libjava/java/lang/natString.cc | |
| parent | 6f46f9fe7c6171e17c0d94c48c9612903e3ed028 (diff) | |
| download | gcc-a8159d5c75467e6c53f7ab51ef002a1e1ebcf1b8.tar.gz | |
2003-03-29 Eric Blake <ebb9@email.byu.edu>
Tom Tromey <tromey@redhat.com>
* java/lang/natString.cc (hashCode): Use cachedHashCode.
(init()): Removed.
(charAt): Put index in exception.
(contentEquals): New method.
Include StringBuffer.h.
* java/lang/String.java (cachedHashCode): New field.
(String()): Follow classpath implementation.
(init()): Removed.
(contentEquals): Declare.
(subSequence): Don't declare IndexOutIfBoundsException in throws
clause.
(matches, replaceFirst, replaceAll, split): New methods from
Classpath.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65037 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/lang/natString.cc')
| -rw-r--r-- | libjava/java/lang/natString.cc | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc index 0d30a35af51..6514d816a02 100644 --- a/libjava/java/lang/natString.cc +++ b/libjava/java/lang/natString.cc @@ -1,6 +1,6 @@ // natString.cc - Implementation of java.lang.String native methods. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -20,6 +20,7 @@ details. */ #include <java/lang/ArrayIndexOutOfBoundsException.h> #include <java/lang/StringIndexOutOfBoundsException.h> #include <java/lang/NullPointerException.h> +#include <java/lang/StringBuffer.h> #include <java/io/ByteArrayOutputStream.h> #include <java/io/OutputStreamWriter.h> #include <java/io/ByteArrayInputStream.h> @@ -102,7 +103,9 @@ hashChars (jchar* ptr, jint length) jint java::lang::String::hashCode() { - return hashChars(JvGetStringChars(this), length()); + if (cachedHashCode == 0) + cachedHashCode = hashChars(JvGetStringChars(this), length()); + return cachedHashCode; } jstring* @@ -429,14 +432,6 @@ _Jv_NewStringLatin1(const char *bytes, jsize len) } void -java::lang::String::init () -{ - count = 0; - boffset = sizeof(java::lang::String); - data = this; -} - -void java::lang::String::init(jcharArray chars, jint offset, jint count, jboolean dont_copy) { @@ -552,11 +547,30 @@ java::lang::String::equals(jobject anObject) return true; } +jboolean +java::lang::String::contentEquals(java::lang::StringBuffer* buffer) +{ + if (buffer == NULL) + throw new NullPointerException; + JvSynchronize sync(buffer); + if (count != buffer->count) + return false; + if (data == buffer->value) + return true; // Possible if shared. + jint i = count; + jchar *xptr = JvGetStringChars(this); + jchar *yptr = elements(buffer->value); + while (--i >= 0) + if (*xptr++ != *yptr++) + return false; + return true; +} + jchar java::lang::String::charAt(jint i) { if (i < 0 || i >= count) - throw new java::lang::StringIndexOutOfBoundsException; + throw new java::lang::StringIndexOutOfBoundsException(i); return JvGetStringChars(this)[i]; } |
