#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
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
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;
}
}
}
+/*
+ * 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
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;
}
}