4 * Copyright 2006,2007 Martin Quinson, Malek Cherier All right reserved.
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the license (GNU LGPL) which comes with this package.
9 * This contains the implementation of the functions in relation with the java
13 #include "jmsg_process.h"
15 #include "jxbt_utilities.h"
17 #include "xbt/xbt_jcontext.h"
19 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
22 jprocess_new_global_ref(jobject jprocess,JNIEnv* env) {
23 return (*env)->NewGlobalRef(env,jprocess);
27 jprocess_delete_global_ref(jobject jprocess,JNIEnv* env) {
28 (*env)->DeleteGlobalRef(env,jprocess);
32 jprocess_is_alive(jobject jprocess,JNIEnv* env) {
33 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","isAlive", "()Z");
38 return (*env)->CallBooleanMethod(env,jprocess,id);
42 jprocess_join(jobject jprocess,JNIEnv* env) {
43 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","join", "()V");
48 (*env)->CallVoidMethod(env,jprocess, id);
52 jprocess_exit(jobject jprocess,JNIEnv* env) {
53 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","interrupt", "()V");
58 (*env)->CallVoidMethod(env,jprocess, id);
62 jprocess_yield(jobject jprocess,JNIEnv* env) {
63 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","switchProcess", "()V");
68 (*env)->CallVoidMethod(env,jprocess,id);
72 jprocess_lock_mutex(jobject jprocess,JNIEnv* env) {
73 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","lockMutex", "()V");
78 (*env)->CallVoidMethod(env,jprocess,id);
82 jprocess_unlock_mutex(jobject jprocess,JNIEnv* env) {
83 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","unlockMutex", "()V");
88 (*env)->CallVoidMethod(env,jprocess,id);
93 jprocess_signal_cond(jobject jprocess,JNIEnv* env) {
94 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","signalCond", "()V");
99 (*env)->CallVoidMethod(env,jprocess,id);
103 jprocess_wait_cond(jobject jprocess,JNIEnv* env) {
104 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","waitCond", "()V");
109 (*env)->CallVoidMethod(env,jprocess,id);
114 jprocess_start(jobject jprocess,JNIEnv* env) {
115 jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","start", "()V");
120 DEBUG2("jprocess_start(jproc=%p,env=%p)",jprocess,env);
121 (*env)->CallVoidMethod(env,jprocess,id);
122 DEBUG0("jprocess started");
126 jprocess_to_native_process(jobject jprocess,JNIEnv* env) {
127 jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
132 return (m_process_t)(long)(*env)->GetLongField(env,jprocess,id);
136 jprocess_bind(jobject jprocess,m_process_t process,JNIEnv* env) {
137 jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
142 (*env)->SetLongField(env,jprocess,id,(jlong)(long)(process));
146 jprocess_get_id(jobject jprocess,JNIEnv* env) {
147 jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","id", "J");
152 return (*env)->GetLongField(env,jprocess,id);
156 jprocess_get_name(jobject jprocess,JNIEnv* env) {
157 jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","name", "Ljava/lang/String;");
163 jname = (jstring)(*env)->GetObjectField(env,jprocess,id);
165 return (*env)->NewGlobalRef(env,jname);
170 jprocess_is_valid(jobject jprocess,JNIEnv* env) {
171 jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
176 return (*env)->GetLongField(env,jprocess,id) ? JNI_TRUE : JNI_FALSE;
180 jprocess_schedule(xbt_context_t context) {
184 env = get_current_thread_env();
186 id = jxbt_get_smethod(env,"simgrid/msg/Process","schedule", "()V");
191 (*env)->CallVoidMethod(env,((xbt_jcontext_t)context)->jprocess,id);
197 jprocess_unschedule(xbt_context_t context) {
201 env = get_current_thread_env();
204 id = jxbt_get_smethod(env,"simgrid/msg/Process","unschedule", "()V");
209 (*env)->CallVoidMethod(env,((xbt_jcontext_t)context)->jprocess,id);