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);
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;
+}
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 */
protected As() {
};
-
- public long getBind() { return bind; }
-
public String toString (){
return this.getName();
}
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();
+ }
}
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 **************************/
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);
+}
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;
+}