X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bdc1e4dcf3ddc4c5b8556c99cb1b84ae47924914..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 68b888a0d7..895ae1de19 100644 --- a/src/bindings/ruby/rb_msg_host.c +++ b/src/bindings/ruby/rb_msg_host.c @@ -1,88 +1,105 @@ -/* - * $Id$ - * - * Copyright 2010 Martin Quinson, Mehdi Fekari - * 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_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) { - - const char * h_name = RSTRING(name)->ptr; + + 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,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 -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 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 Get Data -static VALUE host_get_data(VALUE class,VALUE host) -{ - //... - return Qnil; } // Host is Avail -static VALUE host_is_avail(VALUE class,VALUE host) +VALUE rb_host_is_avail(VALUE class, VALUE host) { - m_host_t ht; - Data_Get_Struct(host,m_host_t,ht); - if (!ht) - { - rb_raise(rb_eRuntimeError,"Host not Bound"); + 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)) + + 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; +}