Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove XBT_INFO call
[simgrid.git] / src / bindings / java / surf.i
index 4d69190..d860b98 100644 (file)
@@ -1,13 +1,22 @@
 /* File : example.i */
 %module(directors="1") Surf
 
+%include "arrays_java.i"
+
 %pragma(java) jniclassimports=%{
 import org.simgrid.NativeLib;
-
 %}
 %pragma(java) jniclasscode=%{
   static {
     NativeLib.nativeInit("surf-java");
+    Runtime.getRuntime().addShutdownHook(
+      new Thread() {
+        public void run() {
+          Thread.currentThread().setName( "Destroyer" );
+          Surf.clean();
+        }
+      }
+    );
   }
 %}
 
@@ -19,6 +28,24 @@ import org.simgrid.NativeLib;
 typedef struct lmm_constraint *lmm_constraint_t;
 %}
 
+/* Handle xbt_dynar_t of NetworkLink */
+JAVA_ARRAYSOFCLASSES(NetworkLink);
+%apply NetworkLink[] {NetworkLinkDynar};
+%typemap(jstype) NetworkLinkDynar "NetworkLink[]"
+%typemap(javain) NetworkLinkDynar "NetworkLink.cArrayUnwrap($javainput)"
+
+%typemap(javaout) NetworkLinkDynar {
+     return NetworkLink.cArrayWrap($jnicall, $owner);
+}
+%typemap(out) NetworkLinkDynar {
+  long l = xbt_dynar_length($1);
+  $result = jenv->NewLongArray(l);
+  NetworkLink **lout = (NetworkLink **)xbt_dynar_to_array($1);
+  jenv->SetLongArrayRegion($result, 0, l, (const jlong*)lout);
+  free(lout);
+}
+
+/* Allow to subclass Plugin and send java object to C++ code */
 %feature("director") Plugin;
 
 %include "src/bindings/java/surf_swig.hpp"
@@ -71,7 +98,6 @@ public:
 }
 };
 
-
 %rename lmm_constraint LmmConstraint;
 struct lmm_constraint {
 %extend {
@@ -85,4 +111,3 @@ struct s_xbt_dict {
   char *getValue(char *key) {return (char*)xbt_dict_get_or_null($self, key);}
 }
 };
-