VALUE rb_Server_scheduler(VALUE self, VALUE dt, VALUE times, VALUE proc){ Check_Type(dt, T_FLOAT); struct fs_server* server = NULL; Data_Get_Struct(self, struct fs_server, server); struct fs_timer* timer = fs_server_scheduler(server, rb_float_value(dt), FIX2INT(times), rb_Server_scheduler_function, (void*)proc); return ULONG2NUM((unsigned long)timer); }
static VALUE rb_gsl_ieee_fprintf_double(int argc, VALUE *argv, VALUE obj) { #ifdef RUBY_1_9_LATER rb_io_t *fptr = NULL; #else OpenFile *fptr = NULL; #endif FILE *fp = NULL; int flag = 0; VALUE vtmp; switch (argc) { case 2: switch (TYPE(argv[0])) { case T_STRING: fp = fopen(RSTRING_PTR(argv[0]), "w"); flag = 1; break; case T_FILE: GetOpenFile(argv[0], fptr); rb_io_check_writable(fptr); #ifdef RUBY_1_9_LATER fp = rb_io_stdio_file(fptr); #else fp = GetWriteFile(fptr); #endif break; default: rb_raise(rb_eTypeError, "wrong type argument %s (IO or String expected)", rb_class2name(CLASS_OF(argv[0]))); } vtmp = argv[1]; break; case 1: vtmp = argv[0]; fp = stdout; break; default: rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc); } if (TYPE(vtmp) != T_FLOAT) rb_raise(rb_eTypeError, "wrong argument type %s (Float expected)", rb_class2name(CLASS_OF(vtmp))); #ifdef RUBY_1_9_LATER double rbfv = rb_float_value(vtmp); gsl_ieee_fprintf_double(fp, &rbfv); #else gsl_ieee_fprintf_double(fp, &(RFLOAT(vtmp)->value)); #endif if (fp == stdout) fprintf(stdout, "\n"); if (flag == 1) fclose(fp); return obj; }