Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
jni schedule and unschedule functions implementation
[simgrid.git] / src / java / jmsg_process.c
1 /*
2  * $Id$
3  *
4  * Copyright 2006,2007 Martin Quinson, Malek Cherier All right reserved. 
5  *
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.
8  *
9  * This contains the implementation of the functions in relation with the java
10  * process instance. 
11  */
12  
13 #include "jmsg_process.h"
14 #include "jmsg.h"
15 #include "jxbt_utilities.h"
16
17 #ifndef JAVA_SIMGRID
18 #define JAVA_SIMGRID
19 #endif 
20
21
22 #include "xbt/context_private.h"
23
24 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
25
26
27 jobject
28 jprocess_new_global_ref(jobject jprocess,JNIEnv* env) {
29   return (*env)->NewGlobalRef(env,jprocess);
30 }
31
32 void
33 jprocess_delete_global_ref(jobject jprocess,JNIEnv* env) {
34   (*env)->DeleteGlobalRef(env,jprocess);
35 }
36
37 jboolean
38 jprocess_is_alive(jobject jprocess,JNIEnv* env) {
39   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","isAlive", "()Z");
40         
41   if(!id)
42     return 0;
43
44   return (*env)->CallBooleanMethod(env,jprocess,id);
45 }
46
47 void
48 jprocess_join(jobject jprocess,JNIEnv* env) {
49   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","join", "()V");
50         
51   if(!id)
52     return;
53                 
54   (*env)->CallVoidMethod(env,jprocess, id);
55 }
56
57 void 
58 jprocess_exit(jobject jprocess,JNIEnv* env) {
59   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","interrupt", "()V");
60         
61   if(!id)
62     return;
63         
64   (*env)->CallVoidMethod(env,jprocess, id);
65 }
66
67 void 
68 jprocess_yield(jobject jprocess,JNIEnv* env) {
69   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","switchProcess", "()V");
70     
71   if(!id)
72     return;
73         
74   (*env)->CallVoidMethod(env,jprocess,id);
75 }
76
77 void
78 jprocess_lock_mutex(jobject jprocess,JNIEnv* env) {
79   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","lockMutex", "()V");
80     
81   if(!id)
82     return;
83         
84   (*env)->CallVoidMethod(env,jprocess,id);
85 }
86
87 void
88 jprocess_unlock_mutex(jobject jprocess,JNIEnv* env) {
89   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","unlockMutex", "()V");
90     
91   if(!id)
92     return;
93
94   (*env)->CallVoidMethod(env,jprocess,id);
95 }
96
97
98 void
99 jprocess_signal_cond(jobject jprocess,JNIEnv* env) {
100   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","signalCond", "()V");
101     
102   if(!id)
103     return;
104
105   (*env)->CallVoidMethod(env,jprocess,id);
106 }
107
108 void
109 jprocess_wait_cond(jobject jprocess,JNIEnv* env) {
110   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","waitCond", "()V");
111     
112   if(!id)
113     return;
114
115   (*env)->CallVoidMethod(env,jprocess,id);
116 }
117
118
119 void
120 jprocess_start(jobject jprocess,JNIEnv* env) {
121   jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","start", "()V");
122
123   if(!id)
124     return;
125
126   DEBUG2("jprocess_start(jproc=%p,env=%p)",jprocess,env);
127   (*env)->CallVoidMethod(env,jprocess,id);
128   DEBUG0("jprocess started");
129 }
130
131 m_process_t
132 jprocess_to_native_process(jobject jprocess,JNIEnv* env) {
133   jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
134     
135   if(!id)
136     return NULL;
137
138   return (m_process_t)(long)(*env)->GetLongField(env,jprocess,id);
139 }
140
141 void
142 jprocess_bind(jobject jprocess,m_process_t process,JNIEnv* env) {
143   jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
144     
145   if(!id)
146     return;
147
148   (*env)->SetLongField(env,jprocess,id,(jlong)(long)(process));
149 }
150
151 jlong
152 jprocess_get_id(jobject jprocess,JNIEnv* env) {
153   jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","id", "J");
154     
155   if(!id)
156     return 0;
157
158   return (*env)->GetLongField(env,jprocess,id);
159 }
160
161 jstring
162 jprocess_get_name(jobject jprocess,JNIEnv* env) {
163   jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","name", "Ljava/lang/String;");
164   jobject jname;
165         
166   if(!id)
167     return NULL;
168     
169   jname = (jstring)(*env)->GetObjectField(env,jprocess,id);
170
171   return (*env)->NewGlobalRef(env,jname);
172         
173 }
174
175 jboolean
176 jprocess_is_valid(jobject jprocess,JNIEnv* env) {
177   jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
178     
179   if(!id)
180     return JNI_FALSE;
181
182   return (*env)->GetLongField(env,jprocess,id) ? JNI_TRUE : JNI_FALSE; 
183 }
184
185 void
186 jprocess_schedule(xbt_context_t context) {
187         JNIEnv * env;
188         jmethodID id;
189         
190         env = get_current_thread_env();
191
192         id = jxbt_get_smethod(env,"simgrid/msg/Process","schedule", "()V");
193         
194         if(!id)
195                 return;
196         
197         (*env)->CallVoidMethod(env,context->jprocess,id);
198 }
199
200
201
202 void
203 jprocess_unschedule(xbt_context_t context) {
204         JNIEnv * env;
205         jmethodID id;
206
207         env = get_current_thread_env();
208
209         
210         id = jxbt_get_smethod(env,"simgrid/msg/Process","unschedule", "()V");
211         
212         if(!id)
213                 return;
214         
215         (*env)->CallVoidMethod(env,context->jprocess,id);
216 }
217