Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Ruby Msg Binding : new Methods and new Example
[simgrid.git] / src / bindings / ruby / simgrid_ruby.c
index f879214..74fba1d 100644 (file)
@@ -16,7 +16,6 @@ VALUE rb_msg;
 VALUE rb_task;
 VALUE rb_host;
 
 VALUE rb_task;
 VALUE rb_host;
 
-
 //Init Msg  From Ruby
 static void msg_init(VALUE Class,VALUE args)
 {
 //Init Msg  From Ruby
 static void msg_init(VALUE Class,VALUE args)
 {
@@ -66,19 +65,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
   ("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;cpt<host_count;cpt++) {
   hosts = MSG_get_host_table();
   host_count = MSG_get_host_number();
   for (cpt=0;cpt<host_count;cpt++) {
-    rbHost = (VALUE)((hosts[cpt])->data);// ??!!
-  }
-
-  if (MSG_OK != MSG_clean()){
-    rb_raise(rb_eRuntimeError,"MSG_clean() failed");
+    rbHost = (VALUE)((hosts[cpt])->data);
   }
   return;
 }
 
   }
   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);
 static void msg_createEnvironment(VALUE class,VALUE plateformFile) {
 
   int type = TYPE(plateformFile);
@@ -99,7 +100,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);
   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);
 
   surfxml_add_callback(ETag_surfxml_argument_cb_list,
       rb_application_handler_on_process_arg);
 
@@ -114,6 +114,7 @@ static void msg_deployApplication(VALUE class,VALUE deploymentFile ) {
   if(surf_parse())
     rb_raise(rb_eRuntimeError,"surf_parse() failed");
   surf_parse_close();
   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);
   rb_application_handler_on_end_document();
 
   DEBUG1("Deploy Application(%s)...Done",dep_file);
@@ -129,32 +130,12 @@ static void msg_debug(VALUE class,VALUE msg) {
   DEBUG1("%s",s);
 }
 
   DEBUG1("%s",s);
 }
 
-// Get Clock
-static void msg_get_clock(VALUE class) {
-
-  printf("Simulation time %f\n",MSG_get_clock());
+// get Clock
+static VALUE msg_get_clock(VALUE class) {
+  return rb_float_new(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 */
 
 
 extern const char*xbt_ctx_factory_to_use; /*Hack: let msg load directly the right factory */
 
@@ -164,32 +145,33 @@ void Init_simgrid_ruby() {
 
   // Modules
   rb_msg = rb_define_module("MSG");
 
   // 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,"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_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,"new",(rb_meth)rb_task_new,3);
+  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);
   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);
   rb_define_module_function(rb_task,"execute",(rb_meth)rb_task_execute,1);
   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);
   rb_define_module_function(rb_task,"execute",(rb_meth)rb_task_execute,1);
@@ -199,6 +181,8 @@ 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,"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);
 
   //Host Methods
   rb_define_module_function(rb_host,"getByName",(rb_meth)rb_host_get_by_name,1);
 
   //Host Methods
   rb_define_module_function(rb_host,"getByName",(rb_meth)rb_host_get_by_name,1);
@@ -207,7 +191,6 @@ void Init_simgrid_ruby() {
   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,"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,"hasData",host_has_data,1);
   rb_define_module_function(rb_host,"isAvail",(rb_meth)rb_host_is_avail,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);
+}
\ No newline at end of file