X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8e5967203f4ea512a321daeb1dafb5eac209d69a..e23b481e91e2c7020856a88e25cb6f4fe1358e1f:/src/bindings/ruby/simgrid_ruby.c diff --git a/src/bindings/ruby/simgrid_ruby.c b/src/bindings/ruby/simgrid_ruby.c index 3dca774c25..23c9d5c8b6 100644 --- a/src/bindings/ruby/simgrid_ruby.c +++ b/src/bindings/ruby/simgrid_ruby.c @@ -1,6 +1,7 @@ /* SimGrid Ruby bindings */ -/* Copyright (c) 2010, the SimGrid team. All right reserved. */ +/* Copyright (c) 2010. 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. */ @@ -16,7 +17,6 @@ VALUE rb_msg; VALUE rb_task; VALUE rb_host; - //Init Msg From Ruby static void msg_init(VALUE Class,VALUE args) { @@ -66,19 +66,21 @@ static void msg_run(VALUE class) { DEBUG0 ("MSG_main finished. Bail out before cleanup since there is a bug in this part."); /* Cleanup Ruby hosts */ - DEBUG0("Clean Ruby World"); + DEBUG0("Clean Ruby World "); hosts = MSG_get_host_table(); host_count = MSG_get_host_number(); for (cpt=0;cptdata);// ??!! - } - - if (MSG_OK != MSG_clean()){ - rb_raise(rb_eRuntimeError,"MSG_clean() failed"); + rbHost = (VALUE)((hosts[cpt])->data); } return; } +static void msg_clean(VALUE class) +{ + if (MSG_OK != MSG_clean()) + rb_raise(rb_eRuntimeError,"MSG_clean() failed"); + +} static void msg_createEnvironment(VALUE class,VALUE plateformFile) { int type = TYPE(plateformFile); @@ -99,7 +101,6 @@ static void msg_deployApplication(VALUE class,VALUE deploymentFile ) { surf_parse_reset_parser(); surfxml_add_callback(STag_surfxml_process_cb_list, rb_application_handler_on_begin_process); - surfxml_add_callback(ETag_surfxml_argument_cb_list, rb_application_handler_on_process_arg); @@ -114,6 +115,7 @@ static void msg_deployApplication(VALUE class,VALUE deploymentFile ) { if(surf_parse()) rb_raise(rb_eRuntimeError,"surf_parse() failed"); surf_parse_close(); + rb_application_handler_on_end_document(); DEBUG1("Deploy Application(%s)...Done",dep_file); @@ -129,66 +131,44 @@ static void msg_debug(VALUE class,VALUE msg) { DEBUG1("%s",s); } -// Get Clock -static void msg_get_clock(VALUE class) { +// get Clock +static VALUE msg_get_clock(VALUE class) { + return rb_float_new(MSG_get_clock()); - printf("Simulation time %f\n",MSG_get_clock()); - -} - -// Ruby intropspection : Instanciate a ruby Class From its Name -// Used by ProcessFactory::createProcess - -static VALUE msg_new_ruby_instance(VALUE class,VALUE className) { - ruby_init(); - ruby_init_loadpath(); - char * p_className = RSTRING(className)->ptr; - - return rb_funcall3(rb_const_get(rb_cObject, rb_intern(p_className)),rb_intern("new"),0, 0); -} - -//This Time With Args -static VALUE msg_new_ruby_instance_with_args(VALUE class,VALUE className,VALUE args) { - ruby_init(); - ruby_init_loadpath(); - char * p_className = RSTRING(className)->ptr; - return rb_funcall(rb_const_get(rb_cObject, rb_intern(p_className)),rb_intern("new"), 1, args); } - extern const char*xbt_ctx_factory_to_use; /*Hack: let msg load directly the right factory */ typedef VALUE(*rb_meth)(ANYARGS); -void Init_simgrid_ruby() { +void Init_libsimgrid() { xbt_ctx_factory_to_use = "ruby"; // Modules rb_msg = rb_define_module("MSG"); - //Associated Environment Methods! - rb_define_method(rb_msg,"init",(rb_meth)msg_init,1); - rb_define_method(rb_msg,"run",(rb_meth)msg_run,0); - rb_define_method(rb_msg,"createEnvironment",(rb_meth)msg_createEnvironment,1); - rb_define_method(rb_msg,"deployApplication",(rb_meth)msg_deployApplication,1); - rb_define_method(rb_msg,"info",(rb_meth)msg_info,1); - rb_define_method(rb_msg,"debug",(rb_meth)msg_debug,1); - rb_define_method(rb_msg,"getClock",(rb_meth)msg_get_clock,0); - rb_define_method(rb_msg,"rubyNewInstance",(rb_meth)msg_new_ruby_instance,1); - rb_define_method(rb_msg,"rubyNewInstanceArgs",(rb_meth)msg_new_ruby_instance_with_args,2); - - // Associated Process Methods - rb_define_method(rb_msg,"processCreate",(rb_meth)rb_process_create,2); + //Associated Environment Methods + rb_define_module_function(rb_msg,"init",(rb_meth)msg_init,1); + rb_define_module_function(rb_msg,"run",(rb_meth)msg_run,0); + rb_define_module_function(rb_msg,"createEnvironment",(rb_meth)msg_createEnvironment,1); + rb_define_module_function(rb_msg,"deployApplication",(rb_meth)msg_deployApplication,1); + rb_define_module_function(rb_msg,"info",(rb_meth)msg_info,1); + rb_define_module_function(rb_msg,"debug",(rb_meth)msg_debug,1); + rb_define_module_function(rb_msg,"getClock",(rb_meth)msg_get_clock,0); + rb_define_module_function(rb_msg,"exit",(rb_meth)msg_clean,0); + + //Associated Process Methods rb_define_method(rb_msg,"processSuspend",(rb_meth)rb_process_suspend,1); rb_define_method(rb_msg,"processResume",(rb_meth)rb_process_resume,1); rb_define_method(rb_msg,"processIsSuspend",(rb_meth)rb_process_isSuspended,1); rb_define_method(rb_msg,"processKill",(rb_meth)rb_process_kill_up,1); + rb_define_method(rb_msg,"processKillDown",(rb_meth)rb_process_kill_down,1); rb_define_method(rb_msg,"processGetHost",(rb_meth)rb_process_getHost,1); rb_define_method(rb_msg,"processExit",(rb_meth)rb_process_exit,1); //Classes - rb_task = rb_define_class_under(rb_msg,"Task",rb_cObject); - rb_host = rb_define_class_under(rb_msg,"Host",rb_cObject); + rb_task = rb_define_class_under(rb_msg,"RbTask",rb_cObject); + rb_host = rb_define_class_under(rb_msg,"RbHost",rb_cObject); - //Task Methods + //Task Methods rb_define_module_function(rb_task,"new",(rb_meth)rb_task_new,3); rb_define_module_function(rb_task,"compSize",(rb_meth)rb_task_comp,1); rb_define_module_function(rb_task,"name",(rb_meth)rb_task_name,1); @@ -199,13 +179,18 @@ void Init_simgrid_ruby() { rb_define_module_function(rb_task,"source",(rb_meth)rb_task_source,1); rb_define_module_function(rb_task,"listen",(rb_meth)rb_task_listen,2); rb_define_module_function(rb_task,"listenFromHost",(rb_meth)rb_task_listen_host,3); + rb_define_module_function(rb_task,"setPriority",(rb_meth)rb_task_set_priority,2); + rb_define_module_function(rb_task,"cancel",(rb_meth)rb_task_cancel,1); + rb_define_module_function(rb_task,"hasData",(rb_meth)rb_task_has_data,1); + rb_define_module_function(rb_task,"setData",(rb_meth)rb_task_set_data,2); + rb_define_module_function(rb_task,"data",(rb_meth)rb_task_get_data,1); //Host Methods rb_define_module_function(rb_host,"getByName",(rb_meth)rb_host_get_by_name,1); rb_define_module_function(rb_host,"name",(rb_meth)rb_host_name,1); rb_define_module_function(rb_host,"speed",(rb_meth)rb_host_speed,1); rb_define_module_function(rb_host,"number",(rb_meth)rb_host_number,0); - rb_define_module_function(rb_host,"setData",(rb_meth)rb_host_set_data,2); - rb_define_module_function(rb_host,"getData",(rb_meth)rb_host_get_data,1); rb_define_module_function(rb_host,"isAvail",(rb_meth)rb_host_is_avail,1); + rb_define_module_function(rb_host,"getHostProcess",(rb_meth)rb_host_process,1); + rb_define_module_function(rb_host,"all",(rb_meth)rb_host_get_all_hosts,0); }