XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
-jobject jhost_new_instance(JNIEnv * env) {
-
- jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
- jmethodID constructor = jxbt_get_jmethod(env, cls, "<init>", "()V");
+static jmethodID jhost_method_Host_constructor;
+static jfieldID jhost_field_Host_bind;
+static jfieldID jhost_field_Host_name;
- if (!constructor)
- return NULL;
- return (*env)->NewObject(env, cls, constructor);
+jobject jhost_new_instance(JNIEnv * env) {
+ jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
+ return (*env)->NewObject(env, cls, jhost_method_Host_constructor);
}
jobject jhost_ref(JNIEnv * env, jobject jhost) {
}
void jhost_bind(jobject jhost, m_host_t host, JNIEnv * env) {
- jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Host", "bind", "J");
-
- if (!id)
- return;
-
- (*env)->SetLongField(env, jhost, id, (jlong) (long) (host));
+ (*env)->SetLongField(env, jhost, jhost_field_Host_bind, (jlong) (long) (host));
}
m_host_t jhost_get_native(JNIEnv * env, jobject jhost) {
- jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Host", "bind", "J");
-
- if (!id)
- return NULL;
-
- return (m_host_t) (long) (*env)->GetLongField(env, jhost, id);
+ return (m_host_t) (long) (*env)->GetLongField(env, jhost, jhost_field_Host_bind);
}
const char *jhost_get_name(jobject jhost, JNIEnv * env) {
}
jboolean jhost_is_valid(jobject jhost, JNIEnv * env) {
- jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Host", "bind", "J");
-
- if (!id)
- return 0;
-
- if ((*env)->GetLongField(env, jhost, id)) {
+ if ((*env)->GetLongField(env, jhost, jhost_field_Host_bind)) {
return JNI_TRUE;
} else {
return JNI_FALSE;
}
}
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Host_nativeInit(JNIEnv *env, jclass cls) {
+ jclass class_Host = (*env)->FindClass(env, "org/simgrid/msg/Host");
+ jhost_method_Host_constructor = (*env)->GetMethodID(env, class_Host, "<init>", "()V");
+ jhost_field_Host_bind = jxbt_get_jfield(env,class_Host, "bind", "J");
+ jhost_field_Host_name = jxbt_get_jfield(env, class_Host, "name", "Ljava/lang/String;");
+ if (!class_Host || !jhost_field_Host_name || !jhost_method_Host_constructor || !jhost_field_Host_bind) {
+ jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug."));
+ }
+}
JNIEXPORT jobject JNICALL
Java_org_simgrid_msg_Host_getByName(JNIEnv * env, jclass cls,
jstring jname) {
jxbt_throw_jni(env, "new global ref allocation failed");
return NULL;
}
-
+ /* Sets the java host name */
+ (*env)->SetObjectField(env, jhost, jhost_field_Host_name, jname);
/* bind the java host and the native host */
jhost_bind(jhost, host, env);
jxbt_throw_jni(env, "global ref allocation failed");
return NULL;
}
-
+ /* Sets the host name */
+ const char *name = MSG_host_get_name(host);
+ jobject jname = (*env)->NewStringUTF(env,name);
+ (*env)->SetObjectField(env, jhost, jhost_field_Host_name, jname);
/* Bind & store it */
jhost_bind(jhost, host, env);
MSG_host_set_data(host, (void *) jhost);
return jhost;
}
-
-JNIEXPORT jstring JNICALL
-Java_org_simgrid_msg_Host_getName(JNIEnv * env,
- jobject jhost) {
- m_host_t host = jhost_get_native(env, jhost);
- const char* name;
-
- if (!host) {
- jxbt_throw_notbound(env, "host", jhost);
- return NULL;
- }
-
- name = MSG_host_get_name(host);
- if (!name)
- xbt_die("This host has no name...");
-
- return (*env)->NewStringUTF(env, name);
-}
-
JNIEXPORT jint JNICALL
Java_org_simgrid_msg_Host_getCount(JNIEnv * env, jclass cls) {
xbt_dynar_t hosts = MSG_hosts_as_dynar();