X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b37127a6689ffbb75a19fa61f9cf0c2253960d4d..488566dad1ae2b42f26a8e291824ff9b16a976f7:/src/bindings/ruby/rb_msg_host.c diff --git a/src/bindings/ruby/rb_msg_host.c b/src/bindings/ruby/rb_msg_host.c index 27eefcefe2..895ae1de19 100644 --- a/src/bindings/ruby/rb_msg_host.c +++ b/src/bindings/ruby/rb_msg_host.c @@ -1,86 +1,105 @@ -#include "rb_msg_host.h" +/* Host-related bindings to ruby */ + +/* 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. */ + +#include "bindings/ruby_bindings.h" // Free Method -static void host_free(m_host_t ht) { +void rb_host_free(m_host_t ht) +{ //Nothing to do !!? } - // New Method : return a Host -static VALUE host_get_by_name(VALUE class, VALUE name) +VALUE rb_host_get_by_name(VALUE class, VALUE name) { - - m_host_t host = MSG_get_host_by_name(RSTRING(name)->ptr); - if(!host) - - rb_raise(rb_eRuntimeError,"MSG_get_host_by_name() failled"); - - return Data_Wrap_Struct(class, 0, host_free, host); -} + const char *h_name = RSTRING(name)->ptr; + m_host_t host = MSG_get_host_by_name(h_name); + if (!host) + rb_raise(rb_eRuntimeError, + bprintf("No host called '%s' found", h_name)); + return Data_Wrap_Struct(class, 0, rb_host_free, host); +} //Get Name - -static VALUE host_name(VALUE class,VALUE host) +VALUE rb_host_name(VALUE class, VALUE host) { - + // Wrap Ruby Value to m_host_t struct - m_host_t ht; - Data_Get_Struct(host, m_host_t, ht); + Data_Get_Struct(host, s_m_host_t, ht); return rb_str_new2(MSG_host_get_name(ht)); - + } // Get Number -static VALUE host_number(VALUE class) +VALUE rb_host_number(VALUE class) { - - return MSG_get_host_number(); - + return INT2NUM(MSG_get_host_number()); } // Host Speed ( Double ) -static VALUE host_speed(VALUE class,VALUE host) +VALUE rb_host_speed(VALUE class, VALUE host) { - m_host_t ht ; - Data_Get_Struct(host,m_host_t,ht); + m_host_t ht; + Data_Get_Struct(host, s_m_host_t, ht); return MSG_get_host_speed(ht); - } - -// Host Set Data -static void host_set_data(VALUE class,VALUE host,VALUE data) +// Host is Avail +VALUE rb_host_is_avail(VALUE class, VALUE host) { - //... + m_host_t ht; + Data_Get_Struct(host, s_m_host_t, ht); + if (!ht) { + rb_raise(rb_eRuntimeError, "Host not Bound"); + return Qnil; + } + + if (MSG_host_is_avail(ht)) + return Qtrue; + + return Qfalse; } -// Host Get Data -static VALUE host_get_data(VALUE class,VALUE host) +// getHost from process +VALUE rb_host_process(VALUE class, VALUE ruby_process) { - //... - return Qnil; -} + + m_process_t process = rb_process_to_native(ruby_process); + m_host_t host; + if (!process) { + rb_raise(rb_eRuntimeError, "Process Not Bound...while getting Host"); + return Qnil; // NULL + } + host = MSG_process_get_host(process); -// Host is Avail -static VALUE host_is_avail(VALUE class,VALUE host) + return Data_Wrap_Struct(class, 0, rb_host_free, host); + +} + +// get all hosts +VALUE rb_host_get_all_hosts(VALUE class) { - - m_host_t ht; - Data_Get_Struct(host,m_host_t,ht); - if (!ht) - { - rb_raise(rb_eRuntimeError,"Host not Bound"); - return Qnil; - } - - if(MSG_host_is_avail(ht)) - return Qtrue; - - return Qfalse; + int nb, index; + m_host_t *hosts; + VALUE rb_hosts; + nb = MSG_get_host_number(); + hosts = MSG_get_host_table(); + rb_hosts = rb_ary_new2(nb); + + for (index = 0; index < nb; index++) + rb_ary_push(rb_hosts, + Data_Wrap_Struct(class, 0, rb_host_free, hosts[index])); + + return rb_hosts; }