set(JMSG_C_SRC
src/bindings/java/jmsg.c
src/bindings/java/jmsg.h
+ src/bindings/java/jmsg_as.c
+ src/bindings/java/jmsg_as.h
src/bindings/java/jmsg_comm.c
src/bindings/java/jmsg_comm.h
src/bindings/java/jmsg_file.c
)
set(JMSG_JAVA_SRC
+ src/bindings/java/org/simgrid/msg/As.java
src/bindings/java/org/simgrid/msg/Comm.java
src/bindings/java/org/simgrid/msg/File.java
src/bindings/java/org/simgrid/msg/Host.java
examples/java/startKillTime/CMakeLists.txt
examples/java/suspend/CMakeLists.txt
examples/java/tracing/CMakeLists.txt
- examples/scala/CMakeLists.txt
- examples/scala/masterslave/CMakeLists.txt
- examples/scala/master_slave_bypass/CMakeLists.txt
- examples/scala/master_slave_kill/CMakeLists.txt
examples/lua/CMakeLists.txt
examples/msg/CMakeLists.txt
examples/msg/actions/CMakeLists.txt
examples/msg/bittorrent/CMakeLists.txt
+ examples/msg/chainsend/CMakeLists.txt
examples/msg/chord/CMakeLists.txt
examples/msg/cloud/CMakeLists.txt
examples/msg/gpu/CMakeLists.txt
examples/msg/pmm/CMakeLists.txt
examples/msg/priority/CMakeLists.txt
examples/msg/properties/CMakeLists.txt
+ examples/msg/semaphores/CMakeLists.txt
examples/msg/sendrecv/CMakeLists.txt
- examples/msg/chainsend/CMakeLists.txt
examples/msg/start_kill_time/CMakeLists.txt
examples/msg/suspend/CMakeLists.txt
examples/msg/token_ring/CMakeLists.txt
examples/msg/tracing/CMakeLists.txt
+ examples/scala/CMakeLists.txt
+ examples/scala/master_slave_bypass/CMakeLists.txt
+ examples/scala/master_slave_kill/CMakeLists.txt
+ examples/scala/masterslave/CMakeLists.txt
examples/simdag/CMakeLists.txt
examples/simdag/dax/CMakeLists.txt
examples/simdag/dot/CMakeLists.txt
teshsuite/msg/CMakeLists.txt
teshsuite/msg/trace/CMakeLists.txt
teshsuite/simdag/CMakeLists.txt
+ teshsuite/simdag/availability/CMakeLists.txt
teshsuite/simdag/network/CMakeLists.txt
teshsuite/simdag/network/mxn/CMakeLists.txt
teshsuite/simdag/network/p2p/CMakeLists.txt
teshsuite/simdag/partask/CMakeLists.txt
teshsuite/simdag/platforms/CMakeLists.txt
- teshsuite/simdag/availability/CMakeLists.txt
- teshsuite/xbt/CMakeLists.txt
teshsuite/smpi/CMakeLists.txt
teshsuite/smpi/mpich-test/CMakeLists.txt
- teshsuite/smpi/mpich-test/env/CMakeLists.txt
teshsuite/smpi/mpich-test/coll/CMakeLists.txt
teshsuite/smpi/mpich-test/context/CMakeLists.txt
+ teshsuite/smpi/mpich-test/env/CMakeLists.txt
teshsuite/smpi/mpich-test/profile/CMakeLists.txt
teshsuite/smpi/mpich-test/pt2pt/CMakeLists.txt
+ teshsuite/xbt/CMakeLists.txt
)
set(TOOLS_CMAKEFILES_TXT
add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools)
##################################################################
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools/tesh)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools/graphicator/)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/testsuite/xbt)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/testsuite/surf)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/partask)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/availability)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/env)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/coll)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/context)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/profile)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/pt2pt)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace)
-
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/async)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/bittorrent)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/suspend)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/tracing)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala/masterslave)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala/master_slave_bypass)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala/master_slave_kill)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/properties)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/actions)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/migration)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/chainsend)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/suspend)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/priority)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/icomms)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/bittorrent)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/chainsend)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/chord)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/kademlia)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/pmm)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/start_kill_time)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/io)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/cloud)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gpu)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/tracing)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/mc)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/icomms)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/io)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/kademlia)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/mc)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/migration)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/ns3)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/pmm)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/priority)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/properties)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/semaphores)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/start_kill_time)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/suspend)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/tracing)
+
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala/master_slave_bypass)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala/master_slave_kill)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/scala/masterslave)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/dax)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/goal)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/dot)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/goal)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/metaxml)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/properties)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/scheduling)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi/MM)
+
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/availability)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/partask)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/coll)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/context)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/env)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/profile)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/pt2pt)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt)
+
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/testsuite/surf)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/testsuite/xbt)
+
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools/graphicator/)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools/tesh)
endif()
message("-- [Java] SG_java includes: ${CHECK_INCLUDES}")
+target_link_libraries(SG_java simgrid)
+
if(WIN32)
- get_target_property(SIMGRID_LIB_NAME_NAME SG_java LIBRARY_OUTPUT_NAME)
set_target_properties(SG_java PROPERTIES
- LINK_FLAGS "-Wl,--subsystem,windows,--kill-at ${SIMGRID_LIB_NAME}"
+ LINK_FLAGS "-Wl,--subsystem,windows,--kill-at"
PREFIX "")
find_path(PEXPORTS_PATH NAMES pexports.exe PATHS NO_DEFAULT_PATHS)
message(STATUS "pexports: ${PEXPORTS_PATH}")
add_custom_command(TARGET SG_java POST_BUILD
COMMAND ${PEXPORTS_PATH}/pexports.exe ${CMAKE_BINARY_DIR}/SG_java.dll > ${CMAKE_BINARY_DIR}/SG_java.def)
endif(PEXPORTS_PATH)
-else()
- target_link_libraries(SG_java simgrid)
endif()
# Rules to build simgrid.jar
Msg.info("Having write " + write + " on " + filename);
read = file.read(10000000,1);
- Msg.info("Having read " + read + " on " + filename);
+ Msg.info("Having read " + read + " on " + filename);
}
}
XBT_INFO("\tOpen file '%s'",file->name);
- read = MSG_file_read(ptr,10000000,sizeof(char*),file); // Read for 10MB
+ read = MSG_file_read(ptr,10000000,file); // Read for 10MB
XBT_INFO("\tHave read %zu on %s",read,file->name);
- write = MSG_file_write(ptr,100000,sizeof(char*),file); // Write for 100KB
+ write = MSG_file_write(ptr,100000,file); // Write for 100KB
XBT_INFO("\tHave written %zu on %s",write,file->name);
- read = MSG_file_read(ptr,110000,sizeof(char*),file); // Read for 110KB
+ read = MSG_file_read(ptr,110000,file); // Read for 110KB
XBT_INFO("\tHave read %zu on %s (of size %zu)",read,file->name,
MSG_file_get_size(file));
file = MSG_file_open(mount,FILENAME1);
// Write into the new file
- write = MSG_file_write(ptr,100000,sizeof(char*),file); // Write for 100Ko
+ write = MSG_file_write(ptr,100000,file); // Write for 100Ko
XBT_INFO("\tHave written %zu on %s",write,file->name);
// Close the file
--- /dev/null
+cmake_minimum_required(VERSION 2.6)
+
+set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
+
+add_executable(synchro synchro.c)
+
+### Add definitions for compile
+target_link_libraries(synchro simgrid)
+
+set(tesh_files
+ ${tesh_files}
+ PARENT_SCOPE
+ )
+set(xml_files
+ ${xml_files}
+ PARENT_SCOPE
+ )
+set(examples_src
+ ${examples_src}
+ ${CMAKE_CURRENT_SOURCE_DIR}/synchro.c
+ PARENT_SCOPE
+ )
+set(bin_files
+ ${bin_files}
+ PARENT_SCOPE
+ )
+set(txt_files
+ ${txt_files}
+ PARENT_SCOPE
+ )
msg_sem_t sem;
-int peer(int argc, char* argv[]){
+static int peer(int argc, char* argv[]){
int i = 0;
}
MSG_process_sleep(50);
XBT_INFO("Done");
+
+ return 0;
}
int main(int argc, char* argv[]) {
msg_error_t res = MSG_main();
printf("Finished\n");
- return 0;
+ return (res != MSG_OK);
}
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions0.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions1.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_allReduce.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_allgatherv.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_alltoall.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_alltoallv.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_barrier.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_bcast.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_bcast_reduce_datatypes.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_gather.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_reducescatter.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_waitall.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/actions_with_isend.txt
${CMAKE_CURRENT_SOURCE_DIR}/replay/split_traces
* want to send your task, but only the name of this mailbox. */
typedef struct s_smx_rvpoint *msg_mailbox_t;
+/* ******************************** Environment ************************************ */
+typedef struct s_as *msg_as_t;
/* ******************************** Host ************************************ */
XBT_PUBLIC(double) MSG_get_clock(void);
XBT_PUBLIC(unsigned long int) MSG_get_sent_msg(void);
+/************************** Environment ***********************************/
+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_model(msg_as_t as);
+XBT_PUBLIC(xbt_dynar_t) MSG_environment_as_get_hosts(msg_as_t as);
/************************** File handling ***********************************/
-XBT_PUBLIC(size_t) MSG_file_read(void* ptr, size_t size, size_t nmemb,
- msg_file_t fd);
-XBT_PUBLIC(size_t) MSG_file_write(const void* ptr, size_t size, size_t nmemb,
- msg_file_t fd);
+XBT_PUBLIC(size_t) MSG_file_read(void* ptr, size_t size, msg_file_t fd);
+XBT_PUBLIC(size_t) MSG_file_write(const void* ptr, size_t size, msg_file_t fd);
XBT_PUBLIC(msg_file_t) MSG_file_open(const char* mount, const char* path);
XBT_PUBLIC(int) MSG_file_close(msg_file_t fd);
XBT_PUBLIC(size_t) MSG_file_get_size(msg_file_t fd);
double max_duration);
XBT_PUBLIC(int) simcall_sem_get_capacity(smx_sem_t sem);
-XBT_PUBLIC(double) simcall_file_read(void* ptr, size_t size, size_t nmemb,
- smx_file_t fd);
+XBT_PUBLIC(size_t) simcall_file_read(void* ptr, size_t size, smx_file_t fd);
XBT_PUBLIC(size_t) simcall_file_write(const void* ptr, size_t size,
- size_t nmemb, smx_file_t fd);
+ smx_file_t fd);
XBT_PUBLIC(smx_file_t) simcall_file_open(const char* storage, const char* path);
XBT_PUBLIC(int) simcall_file_close(smx_file_t fd);
XBT_PUBLIC(int) simcall_file_unlink(smx_file_t fd);
#include "jmsg_process.h"
+#include "jmsg_as.h"
+
#include "jmsg_host.h"
#include "jmsg_task.h"
#include "jxbt_utilities.h"
(*env)->ReleaseStringUTFChars(env, jplatformFile, platformFile);
}
+
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Msg_environmentGetRoutingRoot(JNIEnv * env, jclass cls)
+{
+ msg_as_t as = MSG_environment_get_routing_root();
+ jobject jas = jas_new_instance(env);
+ if (!jas) {
+ jxbt_throw_jni(env, "java As instantiation failed");
+ return NULL;
+ }
+ jas = jas_ref(env, jas);
+ if (!jas) {
+ jxbt_throw_jni(env, "new global ref allocation failed");
+ return NULL;
+ }
+ jas_bind(jas, as, env);
+
+ return (jobject) jas;
+}
+
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_debug(JNIEnv * env, jclass cls, jstring js)
{
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_createEnvironment(JNIEnv * env, jclass cls,
jstring jplatformFile);
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Msg_environmentGetRoutingRoot(JNIEnv * env, jclass cls);
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_deployApplication(JNIEnv * env, jclass cls,
jstring jdeploymentFile);
--- /dev/null
+/* Functions related to the java host instances. */
+
+/* Copyright (c) 2007-2012. The SimGrid Team.
+ * All rights 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. */
+
+#include "xbt/str.h"
+#include "xbt/dict.h"
+#include "msg/msg.h"
+#include "jmsg_as.h"
+#include "jxbt_utilities.h"
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
+
+static jmethodID jas_method_As_constructor;
+static jfieldID jas_field_As_bind;
+
+jobject jas_new_instance(JNIEnv * env) {
+ jclass cls = jxbt_get_class(env, "org/simgrid/msg/As");
+ return (*env)->NewObject(env, cls, jas_method_As_constructor);
+}
+
+jobject jas_ref(JNIEnv * env, jobject jas) {
+ return (*env)->NewGlobalRef(env, jas);
+}
+
+void jas_unref(JNIEnv * env, jobject jas) {
+ (*env)->DeleteGlobalRef(env, jas);
+}
+
+void jas_bind(jobject jas, msg_as_t as, JNIEnv * env) {
+ (*env)->SetLongField(env, jas, jas_field_As_bind, (jlong) (long) (as));
+}
+
+msg_as_t jas_get_native(JNIEnv * env, jobject jas) {
+ return (msg_as_t) (long) (*env)->GetLongField(env, jas, jas_field_As_bind);
+}
+
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_As_nativeInit(JNIEnv *env, jclass cls) {
+ jclass class_As = (*env)->FindClass(env, "org/simgrid/msg/As");
+ jas_method_As_constructor = (*env)->GetMethodID(env, class_As, "<init>", "()V");
+ jas_field_As_bind = jxbt_get_jfield(env,class_As, "bind", "J");
+ if (!class_As || !jas_method_As_constructor || !jas_field_As_bind) {
+ jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug."));
+ }
+}
+
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_As_getName(JNIEnv * env, jobject jas) {
+ msg_as_t as = jas_get_native(env, jas);
+ return (*env)->NewStringUTF(env, MSG_environment_as_get_name(as));
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_org_simgrid_msg_As_getSons(JNIEnv * env, jobject jas) {
+ int index = 0;
+ jobjectArray jtable;
+ jobject tmp_jas;
+ msg_as_t tmp_as;
+ msg_as_t self_as = jas_get_native(env, jas);
+
+ xbt_dict_t dict = MSG_environment_as_get_routing_sons(self_as);
+ int count = xbt_dict_length(dict);
+ jclass cls = (*env)->FindClass(env, "org/simgrid/msg/As");
+
+ if (!cls) {
+ return NULL;
+ }
+
+ jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+
+ if (!jtable) {
+ jxbt_throw_jni(env, "Hosts table allocation failed");
+ return NULL;
+ }
+
+ xbt_dict_cursor_t cursor=NULL;
+ char *key;
+
+ xbt_dict_foreach(dict,cursor,key,tmp_as) {
+ tmp_jas = jas_new_instance(env);
+ if (!tmp_jas) {
+ jxbt_throw_jni(env, "java As instantiation failed");
+ return NULL;
+ }
+ tmp_jas = jas_ref(env, tmp_jas);
+ if (!tmp_jas) {
+ jxbt_throw_jni(env, "new global ref allocation failed");
+ return NULL;
+ }
+ jas_bind(tmp_jas, tmp_as, env);
+
+ (*env)->SetObjectArrayElement(env, jtable, index, tmp_jas);
+ index++;
+
+ }
+ return jtable;
+}
+
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_As_getProperty(JNIEnv *env, jobject jas, jobject jname) {
+ msg_as_t as = jas_get_native(env, jas);
+
+ if (!as) {
+ jxbt_throw_notbound(env, "as", jas);
+ return NULL;
+ }
+ const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+
+ const char *property = MSG_environment_as_get_property_value(as, name);
+ if (!property) {
+ return NULL;
+ }
+
+ jobject jproperty = (*env)->NewStringUTF(env, property);
+
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+
+ 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);
+
+ xbt_dynar_t table = MSG_environment_as_get_hosts(as);
+ int count = xbt_dynar_length(table);
+
+ jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
+
+ if (!cls) {
+ return NULL;
+ }
+
+ jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+
+ if (!jtable) {
+ jxbt_throw_jni(env, "Hosts table allocation failed");
+ return NULL;
+ }
+
+ for (index = 0; index < count; index++) {
+
+ host = xbt_dynar_get_as(table,index,msg_host_t);
+
+ jhost = (jobject) (MSG_host_get_data(host));
+ if (!jhost) {
+ jname = (*env)->NewStringUTF(env, MSG_host_get_name(host));
+
+ jhost = Java_org_simgrid_msg_Host_getByName(env, cls, jname);
+
+ /* FIXME: leak of jname ? */
+ }
+
+ (*env)->SetObjectArrayElement(env, jtable, index, jhost);
+ }
+ xbt_dynar_free(&table);
+ return jtable;
+}
--- /dev/null
+/* Functions related to the java As instances. */
+
+/* Copyright (c) 2007-2012. The SimGrid Team.
+ * All rights 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. */
+
+
+#ifndef MSG_JAS_H
+#define MSG_JAS_H
+#include <jni.h>
+#include "msg/msg.h"
+
+/* Functions related to the java host instances. */
+
+/* Copyright (c) 2007-2012. The SimGrid Team.
+ * All rights 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. */
+
+#include "msg/msg.h"
+#include "jmsg.h"
+#include "jmsg_host.h"
+
+jobject jas_new_instance(JNIEnv * env);
+jobject jas_ref(JNIEnv * env, jobject jas);
+void jas_unref(JNIEnv * env, jobject jas);
+void jas_bind(jobject jas, msg_as_t as, JNIEnv * env);
+msg_as_t jas_get_native(JNIEnv * env, jobject jas);
+
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_As_nativeInit(JNIEnv *env, jclass cls);
+
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_As_getName(JNIEnv * env, jobject jas);
+
+JNIEXPORT jobjectArray JNICALL
+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 */
(*env)->ReleaseStringUTFChars(env, jpath, path);
}
JNIEXPORT jlong JNICALL
-Java_org_simgrid_msg_File_read(JNIEnv *env, jobject jfile, jlong jsize, jlong jnmemb) {
+Java_org_simgrid_msg_File_read(JNIEnv *env, jobject jfile, jlong jsize) {
msg_file_t file = jfile_get_native(env, jfile);
size_t n;
- n = MSG_file_read(NULL,(size_t)jsize, (size_t)jnmemb, file);
+ n = MSG_file_read(NULL,(size_t)jsize, file);
return (jlong)n;
}
JNIEXPORT jlong JNICALL
-Java_org_simgrid_msg_File_write(JNIEnv *env, jobject jfile, jlong jsize, jlong jnmemb) {
+Java_org_simgrid_msg_File_write(JNIEnv *env, jobject jfile, jlong jsize) {
msg_file_t file = jfile_get_native(env, jfile);
size_t n;
- n = MSG_file_write(NULL, (size_t)jsize, (size_t)jnmemb, file);
+ n = MSG_file_write(NULL, (size_t)jsize, file);
return (jlong)n;
}
JNIEXPORT void JNICALL
* Method read
*/
JNIEXPORT jlong JNICALL
-Java_org_simgrid_msg_File_read(JNIEnv*, jobject, jlong, jlong);
+Java_org_simgrid_msg_File_read(JNIEnv*, jobject, jlong);
/**
* Class org_simgrid_msg_File
* Method write
*/
JNIEXPORT jlong JNICALL
-Java_org_simgrid_msg_File_write(JNIEnv*, jobject, jlong, jlong);
+Java_org_simgrid_msg_File_write(JNIEnv*, jobject, jlong);
/**
* Class org_simgrid_msg_File
* Method close
JNIEXPORT void JNICALL
Java_org_simgrid_msg_VM_reboot(JNIEnv *env, jobject jvm);
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_VM_get_pm(JNIEnv *env, jobject jvm);
#endif
--- /dev/null
+/*
+ * Bindings to the MSG hosts
+ *
+ * Copyright 2006-2012 The SimGrid Team
+ * 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.
+ *
+ */
+package org.simgrid.msg;
+
+public class As {
+
+ private long bind;
+
+ protected As() {
+ };
+
+ public String toString (){
+ return this.getName();
+ }
+ public native String getName();
+
+ public native As[] getSons();
+
+ public native String getProperty(String name);
+
+ public native String getModel();
+
+ public native Host[] getHosts();
+
+ /**
+ * Class initializer, to initialize various JNI stuff
+ */
+ public static native void nativeInit();
+ static {
+ nativeInit();
+ }
+}
* If there is a need to receive some messages asynchronously, and some not,
* two different mailboxes should be used.
*
- * @param alias The name of the mailbox
+ * @param mailboxName The name of the mailbox
*/
public static native void setAsyncMailbox(String mailboxName);
*/
public final static native void createEnvironment(String platformFile);
+ public final static native As environmentGetRoutingRoot();
+
/**
* The method to deploy the simulation.
*
typedef struct surf_storage_model_extension_public {
surf_action_t(*open) (void *storage, const char* mount, const char* path);
surf_action_t(*close) (void *storage, surf_file_t fd);
- surf_action_t(*read) (void *storage, void* ptr, double size, size_t nmemb,
+ surf_action_t(*read) (void *storage, void* ptr, size_t size,
surf_file_t fd);
surf_action_t(*write) (void *storage, const void* ptr, size_t size,
- size_t nmemb, surf_file_t fd);
+ surf_file_t fd);
surf_action_t(*stat) (void *storage, surf_file_t fd);
surf_action_t(*ls) (void *storage, const char *path);
} s_surf_model_extension_storage_t;
surf_action_t(*open) (void *workstation, const char* storage,
const char* path);
surf_action_t(*close) (void *workstation, surf_file_t fd);
- surf_action_t(*read) (void *workstation, void* ptr, size_t size, size_t nmemb,
+ surf_action_t(*read) (void *workstation, void* ptr, size_t size,
surf_file_t fd);
surf_action_t(*write) (void *workstation, const void* ptr, size_t size,
- size_t nmemb, surf_file_t fd);
+ surf_file_t fd);
surf_action_t(*stat) (void *workstation, surf_file_t fd);
int(*unlink) (void *workstation, surf_file_t fd);
surf_action_t(*ls) (void *workstation, const char* mount, const char *path);
*/
XBT_PUBLIC_DATA(xbt_dynar_t) model_list;
+/*******************************************/
+/*** SURF Platform *************************/
+/*******************************************/
+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(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 **************************/
/*******************************************/
__MSG_host_create(xbt_dict_cursor_get_elm(cursor));
}
}
+
+msg_as_t MSG_environment_get_routing_root() {
+ return surf_AS_get_routing_root();
+}
+
+const char *MSG_environment_as_get_name(msg_as_t as) {
+ return surf_AS_get_name(as);
+}
+
+xbt_dict_t MSG_environment_as_get_routing_sons(msg_as_t as) {
+ xbt_dict_t res = surf_AS_get_routing_sons(as);
+ return res;
+}
+
+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);
+}
* \brief Read elements of a file
*
* \param ptr buffer to where the data is copied
- * \param size of each element
- * \param nmemb is the number of elements of data to read
+ * \param size of the file to read
* \param fd is a the file descriptor
* \return the number of items successfully read
*/
-size_t MSG_file_read(void* ptr, size_t size, size_t nmemb, msg_file_t fd)
+size_t MSG_file_read(void* ptr, size_t size, msg_file_t fd)
{
- return simcall_file_read(ptr, size, nmemb, fd->simdata->smx_file);
+ return simcall_file_read(ptr, size, fd->simdata->smx_file);
}
/** \ingroup msg_file_management
* \brief Write elements into a file
*
* \param ptr buffer from where the data is copied
- * \param size of each element
- * \param nmemb is the number of elements of data to write
+ * \param size of the file to write
* \param fd is a the file descriptor
* \return the number of items successfully write
*/
-size_t MSG_file_write(const void* ptr, size_t size, size_t nmemb, msg_file_t fd)
+size_t MSG_file_write(const void* ptr, size_t size, msg_file_t fd)
{
- return simcall_file_write(ptr, size, nmemb, fd->simdata->smx_file);
+ return simcall_file_write(ptr, size, fd->simdata->smx_file);
}
/** \ingroup msg_file_management
//SIMIX FILE READ
void SIMIX_pre_file_read(smx_simcall_t simcall, void *ptr, size_t size,
- size_t nmemb, smx_file_t fd)
+ smx_file_t fd)
{
- smx_action_t action = SIMIX_file_read(simcall->issuer, ptr, size, nmemb, fd);
+ smx_action_t action = SIMIX_file_read(simcall->issuer, ptr, size, fd);
xbt_fifo_push(action->simcalls, simcall);
simcall->issuer->waiting_action = action;
}
smx_action_t SIMIX_file_read(smx_process_t process, void* ptr, size_t size,
- size_t nmemb, smx_file_t fd)
+ smx_file_t fd)
{
smx_action_t action;
smx_host_t host = process->smx_host;
action->io.host = host;
action->io.surf_io =
- surf_workstation_model->extension.workstation.read(host, ptr, size, nmemb,
+ surf_workstation_model->extension.workstation.read(host, ptr, size,
fd->surf_file);
surf_workstation_model->action_data_set(action->io.surf_io, action);
//SIMIX FILE WRITE
void SIMIX_pre_file_write(smx_simcall_t simcall, const void *ptr, size_t size,
- size_t nmemb, smx_file_t fd)
+ smx_file_t fd)
{
- smx_action_t action = SIMIX_file_write(simcall->issuer, ptr, size, nmemb, fd);
+ smx_action_t action = SIMIX_file_write(simcall->issuer, ptr, size, fd);
xbt_fifo_push(action->simcalls, simcall);
simcall->issuer->waiting_action = action;
}
smx_action_t SIMIX_file_write(smx_process_t process, const void* ptr,
- size_t size, size_t nmemb, smx_file_t fd)
+ size_t size, smx_file_t fd)
{
smx_action_t action;
smx_host_t host = process->smx_host;
action->io.host = host;
action->io.surf_io =
surf_workstation_model->extension.workstation.write(host, ptr, size,
- nmemb, fd->surf_file);
+ fd->surf_file);
surf_workstation_model->action_data_set(action->io.surf_io, action);
XBT_DEBUG("Create io action %p", action);
#include "smx_smurf_private.h"
void SIMIX_pre_file_read(smx_simcall_t simcall, void *ptr, size_t size,
- size_t nmemb, smx_file_t fd);
+ smx_file_t fd);
void SIMIX_pre_file_write(smx_simcall_t simcall, const void *ptr, size_t size,
- size_t nmemb, smx_file_t fd);
+ smx_file_t fd);
void SIMIX_pre_file_open(smx_simcall_t simcall, const char* mount,
const char* path);
void SIMIX_pre_file_close(smx_simcall_t simcall, smx_file_t fd);
size_t SIMIX_pre_file_get_size(smx_simcall_t simcall, smx_file_t fd);
smx_action_t SIMIX_file_read(smx_process_t process, void* ptr, size_t size,
- size_t nmemb, smx_file_t fd);
+ smx_file_t fd);
smx_action_t SIMIX_file_write(smx_process_t process, const void* ptr,
- size_t size, size_t nmemb, smx_file_t fd);
+ size_t size, smx_file_t fd);
smx_action_t SIMIX_file_open(smx_process_t process, const char* storage,
const char* path);
smx_action_t SIMIX_file_close(smx_process_t process, smx_file_t fd);
ACTION(SIMCALL_SEM_ACQUIRE, sem_acquire, WITHOUT_ANSWER, TVOID(result), TSPEC(sem, smx_sem_t)) sep \
ACTION(SIMCALL_SEM_ACQUIRE_TIMEOUT, sem_acquire_timeout, WITHOUT_ANSWER, TVOID(result), TSPEC(sem, smx_sem_t), TDOUBLE(timeout)) sep \
ACTION(SIMCALL_SEM_GET_CAPACITY, sem_get_capacity, WITH_ANSWER, TINT(result), TSPEC(sem, smx_sem_t)) sep \
-ACTION(SIMCALL_FILE_READ, file_read, WITHOUT_ANSWER, TDOUBLE(result), TPTR(ptr), TSIZE(size), TSIZE(nmemb), TSPEC(fd, smx_file_t)) sep \
-ACTION(SIMCALL_FILE_WRITE, file_write, WITHOUT_ANSWER, TSIZE(result), TCPTR(ptr), TSIZE(size), TSIZE(nmemb), TSPEC(fd, smx_file_t)) sep \
+ACTION(SIMCALL_FILE_READ, file_read, WITHOUT_ANSWER, TSIZE(result), TPTR(ptr), TSIZE(size), TSPEC(fd, smx_file_t)) sep \
+ACTION(SIMCALL_FILE_WRITE, file_write, WITHOUT_ANSWER, TSIZE(result), TCPTR(ptr), TSIZE(size), TSPEC(fd, smx_file_t)) sep \
ACTION(SIMCALL_FILE_OPEN, file_open, WITHOUT_ANSWER, TSPEC(result, smx_file_t), TSTRING(mount), TSTRING(path)) sep \
ACTION(SIMCALL_FILE_CLOSE, file_close, WITHOUT_ANSWER, TINT(result), TSPEC(fd, smx_file_t)) sep \
ACTION(SIMCALL_FILE_UNLINK, file_unlink, WITH_ANSWER, TINT(result), TSPEC(fd, smx_file_t)) sep \
* \ingroup simix_file_management
*
*/
-double simcall_file_read(void* ptr, size_t size, size_t nmemb, smx_file_t fd)
+size_t simcall_file_read(void* ptr, size_t size, smx_file_t fd)
{
- return simcall_BODY_file_read(ptr, size, nmemb, fd);
+ return simcall_BODY_file_read(ptr, size, fd);
}
/**
* \ingroup simix_file_management
*
*/
-size_t simcall_file_write(const void* ptr, size_t size, size_t nmemb,
+size_t simcall_file_write(const void* ptr, size_t size,
smx_file_t fd)
{
- return simcall_BODY_file_write(ptr, size, nmemb, fd);
+ return simcall_BODY_file_write(ptr, size, fd);
}
/**
return action;
}
-static surf_action_t storage_action_read(void *storage, void* ptr, double size,
- size_t nmemb, surf_file_t fd)
+static surf_action_t storage_action_read(void *storage, void* ptr,
+ size_t size, surf_file_t fd)
{
if(size > fd->size)
size = fd->size;
}
static surf_action_t storage_action_write(void *storage, const void* ptr,
- size_t size, size_t nmemb,
- surf_file_t fd)
+ size_t size, surf_file_t fd)
{
char *filename = fd->name;
XBT_DEBUG("\tWrite file '%s' size '%zu/%zu'",filename,size,fd->size);
while ((read = xbt_getline(&line, &len, file)) != -1) {
if (read){
- if(sscanf(line,"%s %lu",path, (unsigned long*)&size)==2) {
+ if(sscanf(line,"%s %zu",path, &size)==2) {
*used_size += size;
xbt_dict_set(parse_content,path,(void*) size,NULL);
} else {
*/
int __surf_is_absolute_file_path(const char *file_path);
-typedef struct s_as *AS_t;
typedef struct s_routing_edge {
AS_t rc_component;
e_surf_network_element_type_t rc_type;
finalize_rec(routing_platf->root);
xbt_free(routing_platf);
}
+
+AS_t surf_AS_get_routing_root() {
+ return routing_platf->root;
+}
+
+const char *surf_AS_get_name(AS_t as) {
+ return as->name;
+}
+
+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);
+ delm = xbt_lib_get_elm_or_null(host_lib, relm->name);
+ if (delm!=NULL) {
+ xbt_dynar_push(res, &delm);
+ }
+ }
+ return res;
+}
}
static surf_action_t ws_action_read(void *workstation, void* ptr, size_t size,
- size_t nmemb, surf_file_t fd)
+ surf_file_t fd)
{
storage_t st = find_storage_on_mount_list(workstation, fd->storage);
XBT_DEBUG("READ on disk '%s'",st->generic_resource.name);
surf_model_t model = st->generic_resource.model;
- return model->extension.storage.read(st, ptr, (double)size, nmemb, fd);
+ return model->extension.storage.read(st, ptr, size, fd);
}
static surf_action_t ws_action_write(void *workstation, const void* ptr,
- size_t size, size_t nmemb, surf_file_t fd)
+ size_t size, surf_file_t fd)
{
storage_t st = find_storage_on_mount_list(workstation, fd->storage);
XBT_DEBUG("WRITE on disk '%s'",st->generic_resource.name);
surf_model_t model = st->generic_resource.model;
- return model->extension.storage.write(st, ptr, size, nmemb, fd);
+ return model->extension.storage.write(st, ptr, size, fd);
}
static int ws_file_unlink(void *workstation, surf_file_t fd)
- Makefile
- doc/html/.*
++ \.cproject
+ \.gitignore
+ README\.(coding|git)
+ mk_win-dist.sh