Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'hypervisor' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid...
authorPaul Bédaride <paul.bedaride@gmail.com>
Thu, 6 Jun 2013 21:33:40 +0000 (23:33 +0200)
committerPaul Bédaride <paul.bedaride@gmail.com>
Thu, 6 Jun 2013 21:33:40 +0000 (23:33 +0200)
include/msg/msg.h
src/bindings/java/jmsg_as.c
src/bindings/java/jmsg_as.h
src/bindings/java/org/simgrid/msg/As.java
src/include/surf/surf.h
src/msg/msg_environment.c
src/surf/surf_routing.c

index 079b8c4..154fc39 100644 (file)
@@ -73,7 +73,9 @@ XBT_PUBLIC(unsigned long int) MSG_get_sent_msg(void);
 XBT_PUBLIC(msg_as_t) MSG_environment_get_routing_root(void);
 XBT_PUBLIC(const char *) MSG_environment_as_get_name(msg_as_t as);
 XBT_PUBLIC(xbt_dict_t) MSG_environment_as_get_routing_sons(msg_as_t as);
-XBT_PUBLIC(const char *)MSG_environment_as_get_property_value(msg_as_t as, const char *name);
+XBT_PUBLIC(const char *) MSG_environment_as_get_property_value(msg_as_t as, const char *name);
+XBT_PUBLIC(const char *) MSG_environment_as_get_model(msg_as_t as);
+XBT_PUBLIC(xbt_dynar_t) MSG_environment_as_get_hosts(msg_as_t as);
 
 /************************** File handling ***********************************/
 XBT_PUBLIC(double) MSG_file_read(void* ptr, size_t size, size_t nmemb, msg_file_t stream);
index 3fae715..26ad667 100644 (file)
@@ -123,3 +123,64 @@ Java_org_simgrid_msg_As_getProperty(JNIEnv *env, jobject jas, jobject jname) {
   return jproperty;
 }
 
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_As_getModel(JNIEnv * env, jobject jas) {
+  msg_as_t as = jas_get_native(env, jas);
+  return (*env)->NewStringUTF(env, MSG_environment_as_get_model(as));
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_org_simgrid_msg_As_getHosts(JNIEnv * env, jobject jas)
+{
+  int index;
+  jobjectArray jtable;
+  jobject jhost;
+  jstring jname;
+  msg_host_t host;
+  msg_as_t as = jas_get_native(env, jas);
+  printf("t5\n");
+
+  xbt_dynar_t table =  MSG_environment_as_get_hosts(as);
+  int count = xbt_dynar_length(table);
+  printf("t6-count: %d\n", count);
+
+  jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
+
+  if (!cls) {
+    return NULL;
+  }
+  
+  jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+  printf("t7\n");
+
+  if (!jtable) {
+    jxbt_throw_jni(env, "Hosts table allocation failed");
+    return NULL;
+  }
+  printf("t8\n");
+
+  for (index = 0; index < count; index++) {
+  printf("t9\n");
+
+    host = xbt_dynar_get_as(table,index,msg_host_t);
+  printf("t9: %p\n", host);
+
+    jhost = (jobject) (MSG_host_get_data(host));
+  printf("t9\n");
+  printf("name: %s\n", MSG_host_get_name(host));
+    if (!jhost) {
+      jname = (*env)->NewStringUTF(env, MSG_host_get_name(host));
+  printf("t10\n");
+
+      jhost = Java_org_simgrid_msg_Host_getByName(env, cls, jname);
+  printf("t11\n");
+
+      /* FIXME: leak of jname ? */
+    }
+
+    (*env)->SetObjectArrayElement(env, jtable, index, jhost);
+  }
+  printf("t9\n");
+  xbt_dynar_free(&table);
+  return jtable;
+}
index 6961d4a..00b21fc 100644 (file)
@@ -42,5 +42,10 @@ Java_org_simgrid_msg_As_getSons(JNIEnv * env, jobject jas);
 JNIEXPORT jobject JNICALL
 Java_org_simgrid_msg_As_getProperty(JNIEnv *env, jobject jhost, jobject jname);
 
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_As_getModel(JNIEnv * env, jobject jas);
+
+JNIEXPORT jobjectArray JNICALL
+Java_org_simgrid_msg_As_getHosts(JNIEnv * env, jobject jas);
 
 #endif                          /*!MSG_JAS_H */
index 9e62f4f..f895e1a 100644 (file)
@@ -18,9 +18,6 @@ public class As {
     protected As() {
        };
 
-    
-    public long getBind() { return bind; }
-
     public String toString (){
        return this.getName(); 
     }
@@ -30,11 +27,15 @@ public class As {
 
     public native String getProperty(String name);
 
-       /**
-        * Class initializer, to initialize various JNI stuff
-        */
-       public static native void nativeInit();
-       static {
-               nativeInit();
-       }
+    public native String getModel();
+
+    public native Host[] getHosts();
+
+    /**
+      * Class initializer, to initialize various JNI stuff
+      */
+    public static native void nativeInit();
+    static {
+       nativeInit();
+    }
 }
index 65694cc..0ce4624 100644 (file)
@@ -719,9 +719,10 @@ XBT_PUBLIC_DATA(xbt_dynar_t) model_list_invoke;
 typedef struct s_as *AS_t;
 
 XBT_PUBLIC_DATA(AS_t) surf_AS_get_routing_root(void); 
-XBT_PUBLIC_DATA(const char *)surf_AS_get_name(AS_t as);
+XBT_PUBLIC_DATA(const char *) surf_AS_get_name(AS_t as);
 XBT_PUBLIC_DATA(xbt_dict_t) surf_AS_get_routing_sons(AS_t as);
-
+XBT_PUBLIC_DATA(const char *) surf_AS_get_model(AS_t as);
+XBT_PUBLIC_DATA(xbt_dynar_t) surf_AS_get_hosts(AS_t as);
 
 /*******************************************/
 /*** SURF Globals **************************/
index 78184f7..77c8761 100644 (file)
@@ -65,5 +65,15 @@ xbt_dict_t MSG_environment_as_get_routing_sons(msg_as_t as) {
 const char *MSG_environment_as_get_property_value(msg_as_t as, const char *name)
 {
   xbt_dict_t dict = xbt_lib_get_or_null(as_router_lib, MSG_environment_as_get_name(as), ROUTING_PROP_ASR_LEVEL);
+  if (dict==NULL)
+    return NULL;
   return xbt_dict_get_or_null(dict, name);
 }
+
+const char *MSG_environment_as_get_model(msg_as_t as) {
+  return surf_AS_get_model(as);
+}
+
+xbt_dynar_t MSG_environment_as_get_hosts(msg_as_t as) {
+  return surf_AS_get_hosts(as);
+}
index c4a0fa3..1109924 100644 (file)
@@ -1242,4 +1242,24 @@ xbt_dict_t surf_AS_get_routing_sons(AS_t as) {
   return as->routing_sons;
 }
 
+const char *surf_AS_get_model(AS_t as) {
+  return as->model_desc->name;
+}
 
+xbt_dynar_t surf_AS_get_hosts(AS_t as) {
+  xbt_dynar_t elms = as->index_network_elm;
+  sg_routing_edge_t relm;
+  xbt_dictelm_t delm;
+  int index;
+  int count = xbt_dynar_length(elms);
+  xbt_dynar_t res =  xbt_dynar_new(sizeof(xbt_dictelm_t), NULL);
+  for (index = 0; index < count; index++) {
+     relm = xbt_dynar_get_as(elms, index, sg_routing_edge_t);
+     printf("relm:%s\n", relm->name);
+     delm = xbt_lib_get_elm_or_null(host_lib, relm->name);
+     if (delm!=NULL) {
+       xbt_dynar_push(res, &delm);
+     }
+  }
+  return res;
+}