Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
(kinda) working java wrappers by Malek and me
[simgrid.git] / src / java / jmsg_process.c
diff --git a/src/java/jmsg_process.c b/src/java/jmsg_process.c
new file mode 100644 (file)
index 0000000..f4abf58
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006,2007 Martin Quinson, Malek Cherier All right reserved. 
+ *
+ * This program is free software; you can redistribute it and/or modify it 
+ * under the terms of the license (GNU LGPL) which comes with this package.
+ *
+ * This contains the implementation of the functions in relation with the java
+ * process instance. 
+ */
+#include "jmsg.h"
+#include "jmsg_process.h"
+#include "jxbt_utilities.h"
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
+
+
+jobject
+jprocess_new_global_ref(jobject jprocess,JNIEnv* env) {
+  return (*env)->NewGlobalRef(env,jprocess);
+}
+
+void
+jprocess_delete_global_ref(jobject jprocess,JNIEnv* env) {
+  (*env)->DeleteGlobalRef(env,jprocess);
+}
+
+jboolean
+jprocess_is_alive(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","isAlive", "()Z");
+       
+  if(!id)
+    return 0;
+
+  return (*env)->CallBooleanMethod(env,jprocess,id);
+}
+
+void
+jprocess_join(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","join", "()V");
+       
+  if(!id)
+    return;
+               
+  (*env)->CallVoidMethod(env,jprocess, id);
+}
+
+void 
+jprocess_exit(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","interrupt", "()V");
+       
+  if(!id)
+    return;
+       
+  (*env)->CallVoidMethod(env,jprocess, id);
+}
+
+void 
+jprocess_yield(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","switchProcess", "()V");
+    
+  if(!id)
+    return;
+       
+  (*env)->CallVoidMethod(env,jprocess,id);
+}
+
+void
+jprocess_lock_mutex(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","lockMutex", "()V");
+    
+  if(!id)
+    return;
+       
+  (*env)->CallVoidMethod(env,jprocess,id);
+}
+
+void
+jprocess_unlock_mutex(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","unlockMutex", "()V");
+    
+  if(!id)
+    return;
+
+  (*env)->CallVoidMethod(env,jprocess,id);
+}
+
+
+void
+jprocess_signal_cond(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","signalCond", "()V");
+    
+  if(!id)
+    return;
+
+  (*env)->CallVoidMethod(env,jprocess,id);
+}
+
+void
+jprocess_wait_cond(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","waitCond", "()V");
+    
+  if(!id)
+    return;
+
+  (*env)->CallVoidMethod(env,jprocess,id);
+}
+
+
+void
+jprocess_start(jobject jprocess,JNIEnv* env) {
+  jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","start", "()V");
+    
+  if(!id)
+    return;
+
+  DEBUG2("jprocess_start(jproc=%p,env=%p)",jprocess,env);
+  (*env)->CallVoidMethod(env,jprocess,id);
+  DEBUG0("jprocess started");
+}
+
+m_process_t
+jprocess_to_native_process(jobject jprocess,JNIEnv* env) {
+  jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
+    
+  if(!id)
+    return NULL;
+
+  return (m_process_t)(long)(*env)->GetLongField(env,jprocess,id);
+}
+
+void
+jprocess_bind(jobject jprocess,m_process_t process,JNIEnv* env) {
+  jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
+    
+  if(!id)
+    return;
+
+  (*env)->SetLongField(env,jprocess,id,(jlong)(long)(process));
+}
+
+jlong
+jprocess_get_id(jobject jprocess,JNIEnv* env) {
+  jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","id", "J");
+    
+  if(!id)
+    return 0;
+
+  return (*env)->GetLongField(env,jprocess,id);
+}
+
+jstring
+jprocess_get_name(jobject jprocess,JNIEnv* env) {
+  jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","name", "Ljava/lang/String;");
+  jobject jname;
+       
+  if(!id)
+    return NULL;
+    
+  jname = (jstring)(*env)->GetObjectField(env,jprocess,id);
+
+  return (*env)->NewGlobalRef(env,jname);
+       
+}
+
+jboolean
+jprocess_is_valid(jobject jprocess,JNIEnv* env) {
+  jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J");
+    
+  if(!id)
+    return JNI_FALSE;
+
+  return (*env)->GetLongField(env,jprocess,id) ? JNI_TRUE : JNI_FALSE; 
+}