X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fnative%2Fvm%2Fcldc1.1%2Fjava_lang_String.c;h=ad60b48bd9e751bd058b10f03ec854c402a297bc;hb=bfb7d15b502b8170ec8a9b348c546418c0e44ace;hp=8d5e0eca55a0491b8d252da2a6193b1f81291348;hpb=51959e27a62cb482bbe35962a1d47de0d7f9898b;p=cacao.git diff --git a/src/native/vm/cldc1.1/java_lang_String.c b/src/native/vm/cldc1.1/java_lang_String.c index 8d5e0eca5..ad60b48bd 100644 --- a/src/native/vm/cldc1.1/java_lang_String.c +++ b/src/native/vm/cldc1.1/java_lang_String.c @@ -36,11 +36,45 @@ #include "native/jni.h" #include "native/native.h" -#include "native/include/java_lang_String.h" + #include "native/include/java_lang_Object.h" + +#include "native/include/java_lang_String.h" + #include "vm/stringlocal.h" +/* native methods implemented by this file ************************************/ + +static JNINativeMethod methods[] = { + { "hashCode", "()I", (void *) (ptrint) &Java_java_lang_String_hashCode }, + { "indexOf", "(I)I", (void *) (ptrint) &Java_java_lang_String_indexOf__I }, + { "indexOf", "(II)I", (void *) (ptrint) &Java_java_lang_String_indexOf__II }, + { "lastIndexOf", "(I)I", (void *) (ptrint) &Java_java_lang_String_lastIndexOf__I }, + { "lastIndexOf", "(II)I", (void *) (ptrint) &Java_java_lang_String_lastIndexOf__II }, +#if 0 + { "equals", "(Ljava/lang/Object;)Z;", (void *) (ptrint) &Java_java_lang_String_equals }, +#endif + { "intern", "()Ljava/lang/String;", (void *) (ptrint) &Java_java_lang_String_intern }, +}; + + +/* _Jv_java_lang_String_init *************************************************** + + Register native functions. + +*******************************************************************************/ + +void _Jv_java_lang_String_init(void) +{ + utf *u; + + u = utf_new_char("java/lang/String"); + + native_method_register(u, methods, NATIVE_METHODS_COUNT); +} + + /* * Class: java/lang/String * Method: hashCode @@ -62,14 +96,42 @@ JNIEXPORT s4 JNICALL Java_java_lang_String_hashCode(JNIEnv *env, java_lang_Strin hash = 0; - for (i = offset; i < (offset + count); i++) { - hash = (31 * hash) + value->data[i]; + for (i = 0; i < count; i++) { + hash = (31 * hash) + value->data[offset + i]; } return hash; } +/* + * Class: java/lang/String + * Method: indexOf + * Signature: (I)I + */ +JNIEXPORT s4 JNICALL Java_java_lang_String_indexOf__I(JNIEnv *env, java_lang_String *this, s4 ch) +{ + java_chararray *value; + s4 offset; + s4 count; + s4 i; + + /* get values from Java object */ + + offset = this->offset; + count = this->count; + value = this->value; + + for (i = 0; i < count; i++) { + if (value->data[offset + i] == ch) { + return i; + } + } + + return -1; +} + + /* * Class: java/lang/String * Method: indexOf @@ -96,9 +158,9 @@ JNIEXPORT s4 JNICALL Java_java_lang_String_indexOf__II(JNIEnv *env, java_lang_St return -1; } - for (i = offset + fromIndex ; i < (offset + count) ; i++) { - if (value->data[i] == ch) { - return i - offset; + for (i = fromIndex ; i < count ; i++) { + if (value->data[offset + i] == ch) { + return i; } } @@ -106,6 +168,17 @@ JNIEXPORT s4 JNICALL Java_java_lang_String_indexOf__II(JNIEnv *env, java_lang_St } +/* + * Class: java/lang/String + * Method: lastIndexOf + * Signature: (I)I + */ +JNIEXPORT s4 JNICALL Java_java_lang_String_lastIndexOf__I(JNIEnv *env, java_lang_String *this, s4 ch) +{ + return Java_java_lang_String_lastIndexOf__II(env, this, ch, this->count - 1); +} + + /* * Class: java/lang/String * Method: lastIndexOf @@ -127,9 +200,9 @@ JNIEXPORT s4 JNICALL Java_java_lang_String_lastIndexOf__II(JNIEnv *env, java_lan start = ((fromIndex >= count) ? count - 1 : fromIndex); - for (i = offset + start; i >= offset; i--) { - if (value->data[i] == ch) { - return i - offset; + for (i = start; i >= 0; i--) { + if (value->data[offset + i] == ch) { + return i; } }