X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/762740361e42dd14f5d24d239a29a1e08895ef64..de7d161240f434a809ae7739fbb15a1db6ab86f2:/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 f4ecd65962..895ae1de19 100644 --- a/src/bindings/ruby/rb_msg_host.c +++ b/src/bindings/ruby/rb_msg_host.c @@ -1,73 +1,105 @@ -/* - * Copyright 2010. The 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. - */ +/* 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 -void rb_host_free(m_host_t ht) { +void rb_host_free(m_host_t ht) +{ //Nothing to do !!? } // New Method : return a Host -VALUE rb_host_get_by_name(VALUE class, VALUE name) { - - const char * h_name = RSTRING(name)->ptr; +VALUE rb_host_get_by_name(VALUE class, VALUE name) +{ + + const char *h_name = RSTRING(name)->ptr; m_host_t host = MSG_get_host_by_name(h_name); - if(!host) - rb_raise(rb_eRuntimeError,"MSG_get_host_by_name() failled"); - - return Data_Wrap_Struct(class,0,rb_host_free,host); + 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 -VALUE rb_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, s_m_host_t, ht); return rb_str_new2(MSG_host_get_name(ht)); - + } // Get Number -VALUE rb_host_number(VALUE class) { +VALUE rb_host_number(VALUE class) +{ return INT2NUM(MSG_get_host_number()); } // Host Speed ( Double ) -VALUE rb_host_speed(VALUE class,VALUE host) { - m_host_t ht ; - Data_Get_Struct(host,s_m_host_t,ht); +VALUE rb_host_speed(VALUE class, VALUE host) +{ + m_host_t ht; + Data_Get_Struct(host, s_m_host_t, ht); return MSG_get_host_speed(ht); } -// Host Set Data -void rb_host_set_data(VALUE class,VALUE host,VALUE data) { - THROW_UNIMPLEMENTED; -} - -// Host Get Data -VALUE rb_host_get_data(VALUE class,VALUE host) { - THROW_UNIMPLEMENTED; - return Qnil; -} - // Host is Avail -VALUE rb_host_is_avail(VALUE class,VALUE host) { +VALUE rb_host_is_avail(VALUE class, VALUE host) +{ m_host_t ht; - Data_Get_Struct(host,s_m_host_t,ht); + Data_Get_Struct(host, s_m_host_t, ht); if (!ht) { - rb_raise(rb_eRuntimeError,"Host not Bound"); + rb_raise(rb_eRuntimeError, "Host not Bound"); return Qnil; } - - if(MSG_host_is_avail(ht)) + + if (MSG_host_is_avail(ht)) return Qtrue; - + return Qfalse; } + +// getHost from process +VALUE rb_host_process(VALUE class, VALUE ruby_process) +{ + + 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); + + return Data_Wrap_Struct(class, 0, rb_host_free, host); + +} + +// get all hosts +VALUE rb_host_get_all_hosts(VALUE class) +{ + 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; +}