Logo AND Algorithmique Numérique Distribuée

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