From: Paul Bédaride Date: Thu, 6 Jun 2013 21:33:25 +0000 (+0200) Subject: Add msg As getModel and GetHosts X-Git-Tag: v3_11_beta~297^2^2~28^2~6 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/51d040b6cc70ac5a722a72bb1f7598b97f699a66 Add msg As getModel and GetHosts --- diff --git a/include/msg/msg.h b/include/msg/msg.h index 657a35792c..16ca784fb3 100644 --- a/include/msg/msg.h +++ b/include/msg/msg.h @@ -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); diff --git a/src/bindings/java/jmsg_as.c b/src/bindings/java/jmsg_as.c index 3fae715ba2..26ad667d3d 100644 --- a/src/bindings/java/jmsg_as.c +++ b/src/bindings/java/jmsg_as.c @@ -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; +} diff --git a/src/bindings/java/jmsg_as.h b/src/bindings/java/jmsg_as.h index 6961d4aec4..00b21fc986 100644 --- a/src/bindings/java/jmsg_as.h +++ b/src/bindings/java/jmsg_as.h @@ -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 */ diff --git a/src/bindings/java/org/simgrid/msg/As.java b/src/bindings/java/org/simgrid/msg/As.java index 9e62f4f48b..f895e1acb9 100644 --- a/src/bindings/java/org/simgrid/msg/As.java +++ b/src/bindings/java/org/simgrid/msg/As.java @@ -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(); + } } diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 65694ccc28..0ce4624690 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -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 **************************/ diff --git a/src/msg/msg_environment.c b/src/msg/msg_environment.c index 78184f7b80..77c876146d 100644 --- a/src/msg/msg_environment.c +++ b/src/msg/msg_environment.c @@ -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); +} diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index c4a0fa3168..110992498b 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -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; +}