Logo AND Algorithmique Numérique Distribuée

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