コード例 #1
0
ファイル: rb_define.c プロジェクト: Passerby/fsnet
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);
}
コード例 #2
0
ファイル: ieee.c プロジェクト: mdunsmuir/rb-gsl
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;
}