Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
"new ruby host method"
[simgrid.git] / src / bindings / rubyDag / rb_simdag.c
1 /* 
2  * $Id$
3  *
4  * Copyright 2010 Simgrid Team         
5  * All right reserved. 
6  *
7  * This program is free software; you can redistribute 
8  * it and/or modify it under the terms of the license 
9  *(GNU LGPL) which comes with this package. 
10  */ 
11
12 #include "rb_SD_task.c"
13 #include "rb_SD_workstation.c"
14 #include <simdag/simdag.h>
15 #define MY_DEBUG
16
17 // XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(ruby);
18
19 // MSG Module
20 VALUE rb_dag;
21 // MSG Classes
22 VALUE rb_task;
23 VALUE rb_workstation;
24
25 //Init Msg_Init From Ruby
26 static void sd_init(VALUE Class,VALUE args)
27
28   char **argv=NULL;
29   const char *tmp;
30   int argc,type,i;
31   VALUE *ptr;
32   type = TYPE(args);
33   if ( type != T_ARRAY )
34   {
35    rb_raise(rb_eRuntimeError,"Bad Argument to SD_init");
36    return;
37   }
38   ptr = RARRAY(args)->ptr;
39   argc= RARRAY(args)->len;
40   argc++;
41   argv= xbt_new0(char*,argc);
42   argv[0] = strdup("ruby");
43   for (i=0;i<argc-1;i++)
44   {
45    VALUE value = ptr[i];
46    type = TYPE(value);
47    tmp = RSTRING(value)->ptr;
48    argv[i+1] = strdup(tmp); 
49   }
50   SD_init(&argc,argv);
51   free(argv);
52 //   INFO0("SD Init...Done");
53   printf("SD Init...Done\n");
54   return;
55   
56 }
57
58 //Init Msg_Run From Ruby
59 static void sd_reinit(VALUE class)
60 {
61   SD_application_reinit();
62 }
63  
64 //deploy Application
65 static void sd_createEnvironment(VALUE class,VALUE plateformFile )
66 {   
67    int type = TYPE(plateformFile);
68    if ( type != T_STRING )
69       rb_raise(rb_eRuntimeError,"Bad Argument's Type");  
70    const char * platform =  RSTRING(plateformFile)->ptr;
71    SD_create_environment(platform);
72    printf("Create Environment...Done\n");
73
74  return;  
75 }
76  
77
78 // INFO
79 static void sd_info(VALUE class,VALUE msg)
80 {
81  const char *s = RSTRING(msg)->ptr;
82 //  INFO1("%s",s);
83  printf("%s\n",s);
84 }
85
86 // Get Clock
87 static VALUE sd_get_clock(VALUE class)
88 {
89   return rb_float_new(SD_get_clock());
90 }   
91
92 void Init_dag()
93 {
94    // Modules
95    rb_dag = rb_define_module("DAG");
96     
97    // Classes
98    //Associated Environment Methods!
99    rb_define_method(rb_dag,"init",sd_init,1);
100    rb_define_method(rb_dag,"reinit",sd_reinit,0);
101    rb_define_method(rb_dag,"createEnvironment",sd_createEnvironment,1);
102    rb_define_method(rb_dag,"info",sd_info,1);
103    rb_define_method(rb_dag,"getClock",sd_get_clock,0);
104    
105    //Classes       
106    rb_task = rb_define_class_under(rb_dag,"SdTask",rb_cObject);
107    rb_workstation = rb_define_class_under(rb_dag,"SdWorkstation",rb_cObject);
108 //    TODO Link Class
109     
110    //Task Methods    
111    rb_define_module_function(rb_task,"new",rb_SD_task_new,2);
112 //    rb_define_module_function(rb_task,"free",rb_SD_task_destroy,1);
113    rb_define_module_function(rb_task,"name",rb_SD_task_name,1);
114    rb_define_module_function(rb_task,"schedule",rb_SD_task_schedule,6);
115    rb_define_module_function(rb_task,"unschedule",rb_SD_task_unschedule,1); 
116    rb_define_module_function(rb_task,"addDependency",rb_SD_task_add_dependency,2);
117    rb_define_module_function(rb_task,"executionTime",rb_SD_task_execution_time,6);
118    rb_define_module_function(rb_task,"startTime",rb_SD_task_start_time,1);
119    rb_define_module_function(rb_task,"finishTime",rb_SD_task_finish_time,1);
120    rb_define_module_function(rb_task,"simulate",rb_SD_simulate,1);
121    
122    //Worstation Methods  
123    rb_define_module_function(rb_workstation,"getList",rb_SD_workstation_list,0);
124    rb_define_module_function(rb_workstation,"getNumber",rb_SD_workstation_number,0);
125    rb_define_module_function(rb_workstation,"name",rb_SD_workstation_name,1);
126 }