JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_Comm_test(JNIEnv *env, jobject jcomm) { msg_comm_t comm; comm = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind); jboolean finished = env->GetBooleanField(jcomm, jcomm_field_Comm_finished); if (finished == JNI_TRUE) { return JNI_TRUE; } if (!comm) { jxbt_throw_native(env,bprintf("comm is null")); return JNI_FALSE; } if (MSG_comm_test(comm)) { msg_error_t status = MSG_comm_get_status(comm); if (status == MSG_OK) { jcomm_bind_task(env,jcomm); return JNI_TRUE; } else { //send the correct exception jmsg_throw_status(env,status); } } return JNI_FALSE; }
JNIEXPORT void JNICALL Java_org_simgrid_msg_Comm_nativeInit(JNIEnv *env, jclass cls) { jclass jfield_class_Comm = env->FindClass("org/simgrid/msg/Comm"); if (!jfield_class_Comm) { jxbt_throw_native(env,bprintf("Can't find the org/simgrid/msg/Comm class.")); return; } jcomm_field_Comm_bind = jxbt_get_jfield(env, jfield_class_Comm, "bind", "J"); jcomm_field_Comm_taskBind = jxbt_get_jfield(env, jfield_class_Comm, "taskBind", "J"); jcomm_field_Comm_receiving = jxbt_get_jfield(env, jfield_class_Comm, "receiving", "Z"); jtask_field_Comm_task = jxbt_get_jfield(env, jfield_class_Comm, "task", "Lorg/simgrid/msg/Task;"); jcomm_field_Comm_finished = jxbt_get_jfield(env, jfield_class_Comm, "finished", "Z"); if (!jcomm_field_Comm_bind || !jcomm_field_Comm_taskBind || !jcomm_field_Comm_receiving || !jtask_field_Comm_task || !jcomm_field_Comm_finished) { jxbt_throw_native(env,bprintf("Can't find some fields in Java class.")); } }
JNIEXPORT void JNICALL Java_org_simgrid_msg_Comm_waitCompletion(JNIEnv *env, jobject jcomm, jdouble timeout) { msg_comm_t comm = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind); if (!comm) { jxbt_throw_native(env,bprintf("comm is null")); return; } jboolean finished = env->GetBooleanField(jcomm, jcomm_field_Comm_finished); if (finished == JNI_TRUE) { return; } msg_error_t status; status = MSG_comm_wait(comm,(double)timeout); env->SetBooleanField(jcomm, jcomm_field_Comm_finished, JNI_TRUE); if (status == MSG_OK) { jcomm_bind_task(env,jcomm); return; } else { jmsg_throw_status(env,status); } }
JNIEXPORT void JNICALL Java_org_simgrid_msg_As_nativeInit(JNIEnv *env, jclass cls) { jclass class_As = env->FindClass("org/simgrid/msg/As"); jas_method_As_constructor = env->GetMethodID(class_As, "<init>", "()V"); jas_field_As_bind = jxbt_get_jfield(env,class_As, "bind", "J"); if (!class_As || !jas_method_As_constructor || !jas_field_As_bind) { jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug.")); } }
JNIEXPORT void JNICALL Java_org_simgrid_msg_VM_nativeInit(JNIEnv *env, jclass cls) { jclass jprocess_class_VM = env->FindClass("org/simgrid/msg/VM"); jvm_field_bind = jxbt_get_jfield(env, jprocess_class_VM, "bind", "J"); if (!jvm_field_bind ) { jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug.")); } }
JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_nativeInit(JNIEnv *env, jclass cls) { jclass class_Host = env->FindClass("org/simgrid/msg/Host"); jhost_method_Host_constructor = env->GetMethodID(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 void JNICALL Java_org_simgrid_msg_Storage_nativeInit(JNIEnv *env, jclass cls) { jclass class_Storage = (*env)->FindClass(env, "org/simgrid/msg/Storage"); jstorage_method_Storage_constructor = (*env)->GetMethodID(env, class_Storage, "<init>", "()V"); jstorage_field_Storage_bind = jxbt_get_jfield(env,class_Storage, "bind", "J"); jstorage_field_Storage_name = jxbt_get_jfield(env, class_Storage, "name", "Ljava/lang/String;"); if (!class_Storage || !jstorage_field_Storage_name || !jstorage_method_Storage_constructor || !jstorage_field_Storage_bind) { jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug.")); } }
JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_nativeInit(JNIEnv *env, jclass cls) { jclass jprocess_class_Process = (*env)->FindClass(env, "org/simgrid/msg/Process"); jprocess_field_Process_name = jxbt_get_jfield(env, jprocess_class_Process, "name", "Ljava/lang/String;"); jprocess_field_Process_bind = jxbt_get_jfield(env, jprocess_class_Process, "bind", "J"); jprocess_field_Process_id = jxbt_get_jfield(env, jprocess_class_Process, "id", "J"); jprocess_field_Process_pid = jxbt_get_jfield(env, jprocess_class_Process, "pid", "I"); jprocess_field_Process_ppid = jxbt_get_jfield(env, jprocess_class_Process, "ppid", "I"); jprocess_field_Process_host = jxbt_get_jfield(env, jprocess_class_Process, "host", "Lorg/simgrid/msg/Host;"); jprocess_field_Process_killTime = jxbt_get_jfield(env, jprocess_class_Process, "killTime", "D"); if (!jprocess_class_Process || !jprocess_field_Process_id || !jprocess_field_Process_name || !jprocess_field_Process_pid || !jprocess_field_Process_ppid || !jprocess_field_Process_host) { jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug.")); } }
void jmsg_throw_status(JNIEnv *env, msg_error_t status) { switch (status) { case MSG_TIMEOUT: jxbt_throw_time_out_failure(env,nullptr); break; case MSG_TRANSFER_FAILURE: jxbt_throw_transfer_failure(env,nullptr); break; case MSG_HOST_FAILURE: jxbt_throw_host_failure(env,nullptr); break; case MSG_TASK_CANCELED: jxbt_throw_task_cancelled(env,nullptr); break; default: jxbt_throw_native(env,xbt_strdup("undefined message failed " "(please see jmsg_throw_status function in jmsg.cpp)")); } }
JNIEXPORT void JNICALL Java_org_simgrid_msg_Semaphore_nativeInit(JNIEnv *env, jclass cls) { jsyncro_field_Semaphore_bind = jxbt_get_sfield(env, "org/simgrid/msg/Semaphore", "bind", "J"); if (!jsyncro_field_Semaphore_bind) { jxbt_throw_native(env,bprintf("Can't find some fields in Semaphore Java class. You should report this bug.")); } }