Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simple example ruby using simdag (first tests)
[simgrid.git] / src / bindings / rubyDag / rb_simdag.c
diff --git a/src/bindings/rubyDag/rb_simdag.c b/src/bindings/rubyDag/rb_simdag.c
new file mode 100644 (file)
index 0000000..55aff59
--- /dev/null
@@ -0,0 +1,126 @@
+/* 
+ * $Id$
+ *
+ * Copyright 2010 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. 
+ */ 
+
+#include "rb_SD_task.c"
+#include "rb_SD_workstation.c"
+#include <simdag/simdag.h>
+#define MY_DEBUG
+
+// XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(ruby);
+
+// MSG Module
+VALUE rb_dag;
+// MSG Classes
+VALUE rb_task;
+VALUE rb_workstation;
+
+//Init Msg_Init From Ruby
+static void sd_init(VALUE Class,VALUE args)
+{ 
+  char **argv=NULL;
+  const char *tmp;
+  int argc,type,i;
+  VALUE *ptr;
+  type = TYPE(args);
+  if ( type != T_ARRAY )
+  {
+   rb_raise(rb_eRuntimeError,"Bad Argument to SD_init");
+   return;
+  }
+  ptr = RARRAY(args)->ptr;
+  argc= RARRAY(args)->len;
+  argc++;
+  argv= xbt_new0(char*,argc);
+  argv[0] = strdup("ruby");
+  for (i=0;i<argc-1;i++)
+  {
+   VALUE value = ptr[i];
+   type = TYPE(value);
+   tmp = RSTRING(value)->ptr;
+   argv[i+1] = strdup(tmp); 
+  }
+  SD_init(&argc,argv);
+  free(argv);
+//   INFO0("SD Init...Done");
+  printf("SD Init...Done\n");
+  return;
+  
+}
+
+//Init Msg_Run From Ruby
+static void sd_reinit(VALUE class)
+{
+  SD_application_reinit();
+}
+//deploy Application
+static void sd_createEnvironment(VALUE class,VALUE plateformFile )
+{   
+   int type = TYPE(plateformFile);
+   if ( type != T_STRING )
+      rb_raise(rb_eRuntimeError,"Bad Argument's Type");  
+   const char * platform =  RSTRING(plateformFile)->ptr;
+   SD_create_environment(platform);
+   printf("Create Environment...Done\n");
+
+ return;  
+}
+
+// INFO
+static void sd_info(VALUE class,VALUE msg)
+{
+ const char *s = RSTRING(msg)->ptr;
+//  INFO1("%s",s);
+ printf("%s\n",s);
+}
+
+// Get Clock
+static VALUE sd_get_clock(VALUE class)
+{
+  return rb_float_new(SD_get_clock());
+}   
+
+void Init_dag()
+{
+   // Modules
+   rb_dag = rb_define_module("DAG");
+    
+   // Classes
+   //Associated Environment Methods!
+   rb_define_method(rb_dag,"init",sd_init,1);
+   rb_define_method(rb_dag,"reinit",sd_reinit,0);
+   rb_define_method(rb_dag,"createEnvironment",sd_createEnvironment,1);
+   rb_define_method(rb_dag,"info",sd_info,1);
+   rb_define_method(rb_dag,"getClock",sd_get_clock,0);
+   
+   //Classes       
+   rb_task = rb_define_class_under(rb_dag,"SdTask",rb_cObject);
+   rb_workstation = rb_define_class_under(rb_dag,"SdWorkstation",rb_cObject);
+//    TODO Link Class
+    
+   //Task Methods    
+   rb_define_module_function(rb_task,"new",rb_SD_task_new,2);
+//    rb_define_module_function(rb_task,"free",rb_SD_task_destroy,1);
+   rb_define_module_function(rb_task,"name",rb_SD_task_name,1);
+   rb_define_module_function(rb_task,"schedule",rb_SD_task_schedule,6);
+   rb_define_module_function(rb_task,"unschedule",rb_SD_task_unschedule,1); 
+   rb_define_module_function(rb_task,"addDependency",rb_SD_task_add_dependency,2);
+   rb_define_module_function(rb_task,"executionTime",rb_SD_task_execution_time,6);
+   rb_define_module_function(rb_task,"startTime",rb_SD_task_start_time,1);
+   rb_define_module_function(rb_task,"finishTime",rb_SD_task_finish_time,1);
+   rb_define_module_function(rb_task,"simulate",rb_SD_simulate,1);
+   
+   //Worstation Methods  
+   rb_define_module_function(rb_workstation,"getList",rb_SD_workstation_list,0);
+   rb_define_module_function(rb_workstation,"getNumber",rb_SD_workstation_number,0);
+   rb_define_module_function(rb_workstation,"name",rb_SD_workstation_name,1);
+}