示例#1
0
static const gsl_multimin_fminimizer_type* get_fminimizer_type(VALUE t)
{
  char name[64];

  switch (TYPE(t)) {
  case T_STRING:
    strcpy(name, STR2CSTR(t));
    if (str_tail_grep(name, "nmsimplex") == 0)
      return gsl_multimin_fminimizer_nmsimplex;
    if (str_tail_grep(name, "nmsimplex2rand") == 0)
      return gsl_multimin_fminimizer_nmsimplex2rand;
    else
      rb_raise(rb_eTypeError, "unknown type %s (nmsimplex and nmsimplex2rand supported)", name);
    break;
  case T_FIXNUM:
    switch (FIX2INT(t)) {
    case GSL_FMINIMIZER_NMSIMPLEX:
      return gsl_multimin_fminimizer_nmsimplex; break;
    case GSL_FMINIMIZER_NMSIMPLEX2RAND:
      return gsl_multimin_fminimizer_nmsimplex2rand; break;
    default:
      rb_raise(rb_eTypeError, "%d: unknown type (not supported)", FIX2INT(t));
      break;
    }
    break;
  default:
    rb_raise(rb_eTypeError, "wrong argument type %s (String or Fixnum expected)",
             rb_class2name(CLASS_OF(t)));
    break;
  }
}
示例#2
0
文件: multimin.c 项目: Fudge/rb-gsl
static const gsl_multimin_fdfminimizer_type* get_fdfminimizer_type(VALUE t)
{
  char name[64];
  switch (TYPE(t)) {
  case T_STRING:
    strcpy(name, STR2CSTR(t));
    if (str_tail_grep(name, "conjugate_fr") == 0) 
      return gsl_multimin_fdfminimizer_conjugate_fr;
    else if (str_tail_grep(name, "conjugate_pr") == 0) 
      return gsl_multimin_fdfminimizer_conjugate_pr;
    else if (str_tail_grep(name, "vector_bfgs") == 0) 
      return gsl_multimin_fdfminimizer_vector_bfgs;
    else if (str_tail_grep(name, "steepest_descent") == 0) 
      return gsl_multimin_fdfminimizer_steepest_descent;
#ifdef GSL_1_9_LATER
    else if (str_tail_grep(name, "vector_bfgs2") == 0) 
      return gsl_multimin_fdfminimizer_vector_bfgs2;
#endif
    else
      rb_raise(rb_eTypeError, "%s: unknown minimizer type", name);
    break;
  case T_FIXNUM:
    switch (FIX2INT(t)) {
    case GSL_FDFMINIMIZER_CONJUGATE_FR:
      return gsl_multimin_fdfminimizer_conjugate_fr; break;
    case GSL_FDFMINIMIZER_CONJUGATE_PR:
      return gsl_multimin_fdfminimizer_conjugate_pr; break;
    case GSL_FDFMINIMIZER_VECTOR_BFGS:
      return gsl_multimin_fdfminimizer_vector_bfgs; break;
    case GSL_FDFMINIMIZER_STEEPEST_DESCENT:
      return gsl_multimin_fdfminimizer_steepest_descent; break;
#ifdef GSL_1_9_LATER
    case GSL_FDFMINIMIZER_VECTOR_BFGS2:
      return gsl_multimin_fdfminimizer_vector_bfgs2; break;
#endif      
    default:
      rb_raise(rb_eTypeError, "%d: unknown type", FIX2INT(t));
      break;
    }
    break;
  default:
    rb_raise(rb_eTypeError, "type is given by a String or a Fixnum");
    break;
  }
}
示例#3
0
文件: root.c 项目: Fudge/rb-gsl
static VALUE rb_gsl_fsolver_new(VALUE klass, VALUE t)
{
  gsl_root_fsolver *s = NULL;
  const gsl_root_fsolver_type *T;
  char name[32];
  switch (TYPE(t)) {
  case T_STRING:
    strcpy(name, STR2CSTR(t));
    if (!str_tail_grep(name, "bisection")) {
      T = gsl_root_fsolver_bisection;
    } else if (!str_tail_grep(name, "falsepos")) {
      T = gsl_root_fsolver_falsepos;
    } else if (!str_tail_grep(name, "brent")) {
      T = gsl_root_fsolver_brent;
    } else {
      rb_raise(rb_eTypeError, 
	       "type must be \"bisection\" or \"falsepos\", or \"brent\".");
    }
    break;
  case T_FIXNUM:
    switch (FIX2INT(t)) {
    case GSL_ROOT_FSOLVER_BISECTION:
      T = gsl_root_fsolver_bisection;
      break;
    case GSL_ROOT_FSOLVER_FALSEPOS:
      T = gsl_root_fsolver_falsepos;
      break;
    case GSL_ROOT_FSOLVER_BRENT:
      T = gsl_root_fsolver_brent;
      break;
    default:
      rb_raise(rb_eTypeError, "type must be BISECTION or FALSEPOS, or BRENT.");
      break;
    }
    break;
  default:
    rb_raise(rb_eTypeError, "wrong argument type %s (String or Fixnum expected)",
	     rb_class2name(CLASS_OF(t)));
    break;
  }
  s = gsl_root_fsolver_alloc(T);
  return Data_Wrap_Struct(klass, 0, gsl_root_fsolver_free, s);
}
示例#4
0
文件: min.c 项目: engineyard/rb-gsl
static const gsl_min_fminimizer_type* rb_gsl_min_fminimizer_type_get(VALUE t) 
{
  char name[32];
  switch (TYPE(t)) {
  case T_STRING:
    strcpy(name, STR2CSTR(t));
    if (str_tail_grep(name, "goldensection") == 0) 
      return gsl_min_fminimizer_goldensection;
    else if (str_tail_grep(name, "brent") == 0) 
      return gsl_min_fminimizer_brent;
#ifdef GSL_1_13_LATER
    else if (str_tail_grep(name, "quad_golden") == 0) 
      return gsl_min_fminimizer_quad_golden;
#endif
    else 
      rb_raise(rb_eTypeError, "unknown type %s (goldensection, brent or quad_golden expected)",
	       name);
    break;
  case T_FIXNUM:
    switch (FIX2INT(t)) {
    case GSL_MIN_FMINIMIZER_GOLDENSECTION: 
      return gsl_min_fminimizer_goldensection; 
      break;
    case GSL_MIN_FMINIMIZER_BRENT: 
      return gsl_min_fminimizer_brent; 
      break;
#ifdef GSL_1_13_LATER
    case GSL_MIN_FMINIMIZER_QUAD_GOLDEN: 
      return gsl_min_fminimizer_quad_golden; 
      break;
#endif
    default: 
      rb_raise(rb_eTypeError, "unknown type (GOLDENSECION or BRENT or QUAD_GOLDEN expected)"); 
      break;
    }
    break;
  default:
    rb_raise(rb_eTypeError, "wrong argument type %s (String of Fixnum)",
	     rb_class2name(CLASS_OF(t)));
    break;
  }
}
示例#5
0
文件: root.c 项目: Fudge/rb-gsl
static VALUE rb_gsl_fdfsolver_new(VALUE klass, VALUE t)
{
  gsl_root_fdfsolver *s = NULL;
  const gsl_root_fdfsolver_type *T;
  char name[32];
  switch (TYPE(t)) {
  case T_STRING:
    strcpy(name, STR2CSTR(t));
    if (!str_tail_grep(name, "newton")) {
      T = gsl_root_fdfsolver_newton;
    } else if (!str_tail_grep(name, "secant")) {
      T = gsl_root_fdfsolver_secant;
    } else if (!str_tail_grep(name, "steffenson")) {
      T = gsl_root_fdfsolver_steffenson;
    } else {
      rb_raise(rb_eTypeError, "type must be NEWTON or SECANT, or STEFFENSON.");
    }
    break;
  case T_FIXNUM:
    switch (FIX2INT(t)) {
    case GSL_ROOT_FDFSOLVER_NEWTON:
      T = gsl_root_fdfsolver_newton;
      break;
    case GSL_ROOT_FDFSOLVER_SECANT:
      T = gsl_root_fdfsolver_secant;
      break;
    case GSL_ROOT_FDFSOLVER_STEFFENSON:
      T = gsl_root_fdfsolver_steffenson;
      break;
    default:
      rb_raise(rb_eTypeError, "type must be NEWTON or SECANT, or STEFFENSON.");
      break;
    }
    break;
  default:
    rb_raise(rb_eTypeError, "wrong argument type %s (String or Fixnum expected)",
	     rb_class2name(CLASS_OF(t)));
    break;
  }
  s = gsl_root_fdfsolver_alloc(T);
  return Data_Wrap_Struct(klass, 0, gsl_root_fdfsolver_free, s);
}
示例#6
0
文件: ool.c 项目: vesselinv/rb-gsl
static const ool_conmin_minimizer_type* get_minimizer_type(VALUE t)
{
	char name[64];
	
  switch (TYPE(t)) {
  case T_STRING:
    strcpy(name, STR2CSTR(t));
    if (str_tail_grep(name, "pgrad") == 0) {
			return ool_conmin_minimizer_pgrad;
    } else if (str_tail_grep(name, "spg") == 0) {
			return ool_conmin_minimizer_spg;
    } else if (str_tail_grep(name, "gencan") == 0) {
			return ool_conmin_minimizer_gencan;
    } else {
      rb_raise(rb_eTypeError, "%s: unknown minimizer type", name);
		}
		break;
	case T_FIXNUM:
		switch (FIX2INT(t)) {	
			case OOL_CONMIN_PGRAD:
				return ool_conmin_minimizer_pgrad;
				break;
			case OOL_CONMIN_SPG:
				return ool_conmin_minimizer_spg;
				break;
			case OOL_CONMIN_GENCAN:
				return ool_conmin_minimizer_gencan;
				break;
			default:	
  	     rb_raise(rb_eTypeError, "%d: unknown minimizer type", FIX2INT(t));
				break;								
		}
		break;
	default:
		if (t == cool_conmin_pgrad) return ool_conmin_minimizer_pgrad;
		else if (t == cool_conmin_spg) return ool_conmin_minimizer_spg;
		else if (t == cool_conmin_gencan) return ool_conmin_minimizer_gencan;
		else rb_raise(rb_eTypeError, "type is given by a String or a Fixnum");
		break;
	}
}
示例#7
0
const gsl_interp_type* get_interp_type(VALUE t)
{
  int type;
  char name[32];
  switch (TYPE(t)) {
  case T_FIXNUM:
    type = FIX2INT(t);
    switch (type) {
    case GSL_INTERP_LINEAR: return gsl_interp_linear; break;
#ifdef GSL_1_1_LATER
    case GSL_INTERP_POLYNOMIAL: return gsl_interp_polynomial; break;
#endif
    case GSL_INTERP_CSPLINE: return gsl_interp_cspline; break;
    case GSL_INTERP_CSPLINE_PERIODIC: return gsl_interp_cspline_periodic; break;
    case GSL_INTERP_AKIMA: return gsl_interp_akima; break;
    case GSL_INTERP_AKIMA_PERIODIC: return gsl_interp_akima_periodic; break;
    default:
      rb_raise(rb_eTypeError, "unknown type %d\n", type);
      break;
    }
    break;
  case T_STRING:
    strcpy(name, STR2CSTR(t));
    if (str_tail_grep(name, "linear") == 0) {
      return gsl_interp_linear;
#ifdef GSL_1_1_LATER
    } else if (str_tail_grep(name, "polynomial") == 0) {
      return gsl_interp_polynomial;
#endif
    } else if (str_tail_grep(name, "cspline") == 0) {
      return gsl_interp_cspline;
    } else if (str_tail_grep(name, "cspline_periodic") == 0) {
      return gsl_interp_cspline_periodic;
    } else if (str_tail_grep(name, "akima") == 0) {
      return gsl_interp_akima;
    } else if (str_tail_grep(name, "akima_periodic") == 0) {
      return gsl_interp_akima_periodic;
    } else {
      rb_raise(rb_eTypeError, "Unknown type");
    }
    break;
  default:
    rb_raise(rb_eTypeError, "Unknown type");
    break;
  }
}
示例#8
0
static const gsl_wavelet_type* rb_gsl_wavelet_get_type_str(char *name)
{
  const gsl_wavelet_type *T;
  if (str_tail_grep(name, "daubechies") == 0)
    T = gsl_wavelet_daubechies;
  else if (str_tail_grep(name, "daubechies_centered") == 0)
    T = gsl_wavelet_daubechies_centered;
  else if (str_tail_grep(name, "haar") == 0)
    T = gsl_wavelet_haar;
  else if (str_tail_grep(name, "haar_centered") == 0)
    T = gsl_wavelet_haar_centered;
  else if (str_tail_grep(name, "bspline") == 0)
    T = gsl_wavelet_bspline;
  else if (str_tail_grep(name, "bspline_centered") == 0)
    T = gsl_wavelet_bspline_centered;
  else
    rb_raise(rb_eArgError, "unknown type %s", name);
  return T;
}
示例#9
0
文件: rng.c 项目: Fudge/rb-gsl
static const gsl_rng_type* get_gsl_rng_type_name(char *name)
{
  if (str_tail_grep(name, "default") == 0) return gsl_rng_default;
  else if (str_tail_grep(name, "mt19937") == 0) return gsl_rng_mt19937;
#ifdef GSL_1_1_LATER
  else if (str_tail_grep(name, "borosh13") == 0) return gsl_rng_borosh13;
  else if (str_tail_grep(name, "coveyou") == 0) return gsl_rng_coveyou;
  else if (str_tail_grep(name, "fishman18") == 0) return gsl_rng_fishman18;
  else if (str_tail_grep(name, "fishman20") == 0) return gsl_rng_fishman20;
  else if (str_tail_grep(name, "fishman2x") == 0) return gsl_rng_fishman2x;
  else if (str_tail_grep(name, "lecuyer21") == 0) return gsl_rng_lecuyer21;
  else if (str_tail_grep(name, "waterman14") == 0) return gsl_rng_waterman14;
  else if (str_tail_grep(name, "knuthran") == 0) return gsl_rng_knuthran;
  else if (str_tail_grep(name, "knuthran2") == 0) return gsl_rng_knuthran2;
#endif
#ifdef GSL_1_2_LATER
  else if (str_tail_grep(name, "mt19937_1999") == 0) return gsl_rng_mt19937_1999;
  else if (str_tail_grep(name, "mt19937-1999") == 0) return gsl_rng_mt19937_1999;
  else if (str_tail_grep(name, "mt19937_1998") == 0) return gsl_rng_mt19937_1998;  
  else if (str_tail_grep(name, "mt19937-1998") == 0) return gsl_rng_mt19937_1998;  
  else if (str_tail_grep(name, "taus113") == 0) return gsl_rng_taus113;
  else if (str_tail_grep(name, "taus2") == 0) return gsl_rng_taus2;
#endif
  else if (str_tail_grep(name, "mt19937") == 0) return gsl_rng_mt19937;
  else if (str_tail_grep(name, "ranlxs0") == 0) return gsl_rng_ranlxs0;
  else if (str_tail_grep(name, "ranlxs1") == 0) return gsl_rng_ranlxs1;
  else if (str_tail_grep(name, "ranlxs2") == 0) return gsl_rng_ranlxs2;
  else if (str_tail_grep(name, "ranlxd1") == 0) return gsl_rng_ranlxd1;
  else if (str_tail_grep(name, "ranlxd2") == 0) return gsl_rng_ranlxd2;
  else if (str_tail_grep(name, "ranlux") == 0) return gsl_rng_ranlux;
  else if (str_tail_grep(name, "ranlux389") == 0) return gsl_rng_ranlux389;
  else if (str_tail_grep(name, "cmrg") == 0) return gsl_rng_cmrg;
  else if (str_tail_grep(name, "mrg") == 0) return gsl_rng_mrg;
  else if (str_tail_grep(name, "taus") == 0) return gsl_rng_taus;
  else if (str_tail_grep(name, "gfsr4") == 0) return gsl_rng_gfsr4;
  else if (str_tail_grep(name, "rand") == 0) return gsl_rng_rand;
  else if (str_tail_grep(name, "random_libc5") == 0) return gsl_rng_random_libc5;
  else if (str_tail_grep(name, "random8_libc5") == 0) return gsl_rng_random8_libc5;
  else if (str_tail_grep(name, "random32_libc5") == 0) return gsl_rng_random32_libc5;
  else if (str_tail_grep(name, "random64_libc5") == 0) return gsl_rng_random64_libc5;
  else if (str_tail_grep(name, "random128_libc5") == 0) return gsl_rng_random128_libc5;
  else if (str_tail_grep(name, "random256_libc5") == 0) return gsl_rng_random256_libc5;  
  else if (str_tail_grep(name, "random-libc5") == 0) return gsl_rng_random_libc5;
  else if (str_tail_grep(name, "random8-libc5") == 0) return gsl_rng_random8_libc5;
  else if (str_tail_grep(name, "random32-libc5") == 0) return gsl_rng_random32_libc5;
  else if (str_tail_grep(name, "random64-libc5") == 0) return gsl_rng_random64_libc5;
  else if (str_tail_grep(name, "random128-libc5") == 0) return gsl_rng_random128_libc5;
  else if (str_tail_grep(name, "random256-libc5") == 0) return gsl_rng_random256_libc5;
  else if (str_tail_grep(name, "random_glibc2") == 0) return gsl_rng_random_glibc2;
  else if (str_tail_grep(name, "random8_glibc2") == 0) return gsl_rng_random8_glibc2;
  else if (str_tail_grep(name, "random32_glibc2") == 0) return gsl_rng_random32_glibc2;
  else if (str_tail_grep(name, "random64_glibc2") == 0) return gsl_rng_random64_glibc2;
  else if (str_tail_grep(name, "random128_glibc2") == 0) return gsl_rng_random128_glibc2;
  else if (str_tail_grep(name, "random256_glibc2") == 0) return gsl_rng_random256_glibc2;
  else if (str_tail_grep(name, "random-glibc2") == 0) return gsl_rng_random_glibc2;
  else if (str_tail_grep(name, "random8-glibc2") == 0) return gsl_rng_random8_glibc2;
  else if (str_tail_grep(name, "random32-glibc2") == 0) return gsl_rng_random32_glibc2;
  else if (str_tail_grep(name, "random64-glibc2") == 0) return gsl_rng_random64_glibc2;
  else if (str_tail_grep(name, "random128-glibc2") == 0) return gsl_rng_random128_glibc2;
  else if (str_tail_grep(name, "random256-glibc2") == 0) return gsl_rng_random256_glibc2;
  else if (str_tail_grep(name, "random_bsd") == 0) return gsl_rng_random_bsd;
  else if (str_tail_grep(name, "random8_bsd") == 0) return gsl_rng_random8_bsd;
  else if (str_tail_grep(name, "random32_bsd") == 0) return gsl_rng_random32_bsd;
  else if (str_tail_grep(name, "random64_bsd") == 0) return gsl_rng_random64_bsd;
  else if (str_tail_grep(name, "random128_bsd") == 0) return gsl_rng_random128_bsd;
  else if (str_tail_grep(name, "random256_bsd") == 0) return gsl_rng_random256_bsd;
  else if (str_tail_grep(name, "random-bsd") == 0) return gsl_rng_random_bsd;
  else if (str_tail_grep(name, "random8-bsd") == 0) return gsl_rng_random8_bsd;
  else if (str_tail_grep(name, "random32-bsd") == 0) return gsl_rng_random32_bsd;
  else if (str_tail_grep(name, "random64-bsd") == 0) return gsl_rng_random64_bsd;
  else if (str_tail_grep(name, "random128-bsd") == 0) return gsl_rng_random128_bsd;
  else if (str_tail_grep(name, "random256-bsd") == 0) return gsl_rng_random256_bsd;
  else if (str_tail_grep(name, "rand48") == 0) return gsl_rng_rand48;
  else if (str_tail_grep(name, "ran0") == 0) return gsl_rng_ran0;
  else if (str_tail_grep(name, "ran1") == 0) return gsl_rng_ran1;
  else if (str_tail_grep(name, "ran2") == 0) return gsl_rng_ran2;
  else if (str_tail_grep(name, "ran3") == 0) return gsl_rng_ran3;
  else if (str_tail_grep(name, "ranf") == 0) return gsl_rng_ranf;
  else if (str_tail_grep(name, "ranmar") == 0) return gsl_rng_ranmar;
  else if (str_tail_grep(name, "r250") == 0) return gsl_rng_r250;
  else if (str_tail_grep(name, "tt800") == 0) return gsl_rng_tt800;
  else if (str_tail_grep(name, "vax") == 0) return gsl_rng_vax;
  else if (str_tail_grep(name, "transputer") == 0) return gsl_rng_transputer;
  else if (str_tail_grep(name, "randu") == 0) return gsl_rng_randu;
  else if (str_tail_grep(name, "minstd") == 0) return gsl_rng_minstd;
  else if (str_tail_grep(name, "uni") == 0) return gsl_rng_uni;
  else if (str_tail_grep(name, "uni32") == 0) return gsl_rng_uni32;
  else if (str_tail_grep(name, "slatec") == 0) return gsl_rng_slatec;
  else if (str_tail_grep(name, "zuf") == 0) return gsl_rng_zuf;
#ifdef HAVE_RNGEXTRA_RNGEXTRA_H
  else if (str_tail_grep(name, "rngextra_rng1") == 0) return rngextra_rng1;
  else if (str_tail_grep(name, "rngextra_rng2") == 0) return rngextra_rng2;
  else if (str_tail_grep(name, "rngextra-rng1") == 0) return rngextra_rng1;
  else if (str_tail_grep(name, "rngextra-rng2") == 0) return rngextra_rng2;
#else
  else if (str_tail_grep(name, "rngextra_rng1")*str_tail_grep(name, "rngextra_rng2") == 0) 
    rb_raise(rb_eNotImpError, "Install the rngextra package found at <http://www.network-theory.co.uk/download/rngextra/>.");
  else if (str_tail_grep(name, "rngextra_rng2")*str_tail_grep(name, "rngextra_rng2") == 0) 
    rb_raise(rb_eNotImpError, "Install the rngextra package found at <http://www.network-theory.co.uk/download/rngextra/>.");
  else if (str_tail_grep(name, "rngextra-rng1")*str_tail_grep(name, "rngextra_rng2") == 0) 
    rb_raise(rb_eNotImpError, "Install the rngextra package found at <http://www.network-theory.co.uk/download/rngextra/>.");
  else if (str_tail_grep(name, "rngextra-rng2")*str_tail_grep(name, "rngextra_rng2") == 0) 
    rb_raise(rb_eNotImpError, "Install the rngextra package found at <http://www.network-theory.co.uk/download/rngextra/>.");
#endif
#ifdef GSL_1_9_LATER
  else if (str_tail_grep(name, "knuthran2002") == 0) return gsl_rng_knuthran2002;
#endif
  else
    rb_raise(rb_eArgError, "unknown generator type \"%s\"", name);
}
示例#10
0
static const gsl_odeiv_step_type* rb_gsl_odeiv_step_type_get(VALUE tt)
{
  const gsl_odeiv_step_type *T;
  int type;
  char name[64];
  switch (TYPE(tt)) {
  case T_FIXNUM:
    type = FIX2INT(tt);
    switch (type) {
    case GSL_ODEIV_STEP_RK2: T = gsl_odeiv_step_rk2; break;
    case GSL_ODEIV_STEP_RK4: T = gsl_odeiv_step_rk4; break;
    case GSL_ODEIV_STEP_RKF45: T = gsl_odeiv_step_rkf45; break;
    case GSL_ODEIV_STEP_RKCK: T = gsl_odeiv_step_rkck; break;
    case GSL_ODEIV_STEP_RK8PD: T = gsl_odeiv_step_rk8pd; break;
    case GSL_ODEIV_STEP_RK2IMP: T = gsl_odeiv_step_rk2imp; break;
    case GSL_ODEIV_STEP_RK4IMP: T = gsl_odeiv_step_rk4imp; break;
    case GSL_ODEIV_STEP_BSIMP: T = gsl_odeiv_step_bsimp; break;
    case GSL_ODEIV_STEP_GEAR1: T = gsl_odeiv_step_gear1; break;
    case GSL_ODEIV_STEP_GEAR2: T = gsl_odeiv_step_gear2; break;
#ifdef GSL_1_6_LATER
    case GSL_ODEIV_STEP_RK2SIMP: T = gsl_odeiv_step_rk2simp; break;
#endif
    default:
      rb_raise(rb_eArgError, "wrong argument type (Fixnum expected)");
      break;
    }
    break;
  case T_STRING:
    strcpy(name, STR2CSTR(tt));
    if (str_tail_grep(name, "rk2") == 0) T = gsl_odeiv_step_rk2;
    else if (str_tail_grep(name, "rk4") == 0) T = gsl_odeiv_step_rk4;
    else if (str_tail_grep(name, "rkf45") == 0) T = gsl_odeiv_step_rkf45;
    else if (str_tail_grep(name, "rkck") == 0) T = gsl_odeiv_step_rkck;
    else if (str_tail_grep(name, "rk8pd") == 0) T = gsl_odeiv_step_rk8pd;
    else if (str_tail_grep(name, "rk2imp") == 0) T = gsl_odeiv_step_rk2imp;
    else if (str_tail_grep(name, "rk4imp") == 0) T = gsl_odeiv_step_rk4imp;
    else if (str_tail_grep(name, "bsimp") == 0) T = gsl_odeiv_step_bsimp;
    else if (str_tail_grep(name, "gear1") == 0) T = gsl_odeiv_step_gear1;
    else if (str_tail_grep(name, "gear2") == 0) T = gsl_odeiv_step_gear2;
#ifdef GSL_1_6_LATER
    else if (str_tail_grep(name, "rk2simp") == 0) T = gsl_odeiv_step_rk2simp;
#endif
    else {
      rb_raise(rb_eArgError, "wrong argument type %s", name);
    }
    break;
  default:
    rb_raise(rb_eArgError, "wrong argument type %s (String or Fixnum expected)",
	     rb_class2name(CLASS_OF(tt)));
    break;
  }
  return T;
}
示例#11
0
文件: graph.c 项目: Zenexer/rb-gsl
void make_graphcommand(char *command, VALUE hash)
{
  VALUE val;
  if (TYPE(hash) == T_STRING) {
    sprintf(command, "graph -T X -g 3 %s", STR2CSTR(hash));
    return;
  }
    
  strcpy(command, "graph");
  if (TYPE(hash) != T_HASH) rb_raise(rb_eTypeError, 
				     "wrong argument type %s (Hash expected)",
				     rb_class2name(CLASS_OF(hash)));
  if ((val = rb_hash_aref(hash, rb_str_new2("T"))) != Qnil)
    sprintf(command, "%s -T %s", command, STR2CSTR(val));
  else
    sprintf(command, "%s -T X", command);

  val = rb_hash_aref(hash, rb_str_new2("C"));
  if (val == Qtrue)
    sprintf(command, "%s -C", command);

  if ((val = rb_hash_aref(hash, rb_str_new2("g"))) != Qnil)
    sprintf(command, "%s -g %d", command, (int) FIX2INT(val));
  else
    sprintf(command, "%s -g 3", command);

  if ((val = rb_hash_aref(hash, rb_str_new2("B"))) == Qtrue)
    sprintf(command, "%s -B", command);
  if ((val = rb_hash_aref(hash, rb_str_new2("E"))) != Qnil)
    sprintf(command, "%s -E %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("f"))) != Qnil)
    sprintf(command, "%s -f %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("F"))) != Qnil)
    sprintf(command, "%s -F %s", command, STR2CSTR(val));

  if ((val = rb_hash_aref(hash, rb_str_new2("h"))) != Qnil)
    sprintf(command, "%s -h %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("k"))) != Qnil)
    sprintf(command, "%s -k %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("K"))) != Qnil)
    sprintf(command, "%s -K %d", command, (int) FIX2INT(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("l"))) != Qnil) {
    if (str_tail_grep(STR2CSTR(val), "xy") || str_tail_grep(STR2CSTR(val), "x/y"))
      sprintf(command, "%s -l x -l y", command);
    else
      sprintf(command, "%s -l %s", command, STR2CSTR(val));
  }

  if ((val = rb_hash_aref(hash, rb_str_new2("L"))) != Qnil)
    sprintf(command, "%s -L \"%s\"", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("N"))) != Qnil)
    sprintf(command, "%s -N %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("r"))) != Qnil)
    sprintf(command, "%s -r %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("R"))) != Qnil)
    sprintf(command, "%s -R %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("s"))) == Qtrue)
    sprintf(command, "%s -s", command);
  if ((val = rb_hash_aref(hash, rb_str_new2("t"))) == Qtrue)
    sprintf(command, "%s -t", command);
  if ((val = rb_hash_aref(hash, rb_str_new2("u"))) != Qnil)
    sprintf(command, "%s -u %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("w"))) != Qnil)
    sprintf(command, "%s -w %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("x"))) != Qnil)
    sprintf(command, "%s -x %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("X"))) != Qnil)
    sprintf(command, "%s -X \"%s\"", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("y"))) != Qnil)
    sprintf(command, "%s -y %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("Y"))) != Qnil)
    sprintf(command, "%s -Y \"%s\"", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("bg-color"))) != Qnil)
    sprintf(command, "%s --bg-color %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("bitmap-size"))) != Qnil)
    sprintf(command, "%s --bitmap-size %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("frame-color"))) != Qnil)
    sprintf(command, "%s --frame-color %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("frame-line-width"))) != Qnil)
    sprintf(command, "%s --frame-line-width %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("max-line-length"))) != Qnil)
    sprintf(command, "%s --max-line-length %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("page-size"))) != Qnil)
    sprintf(command, "%s --page-size %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("pen-colors"))) != Qnil)
    sprintf(command, "%s --pen-colors %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("rotation"))) != Qnil)
    sprintf(command, "%s --rotation %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("title-font-name"))) != Qnil)
    sprintf(command, "%s --title-font-name %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("title-font-size"))) != Qnil)
    sprintf(command, "%s --title-font-size %f", command, NUM2DBL(val));

  if ((val = rb_hash_aref(hash, rb_str_new2("toggle-rotate-y-label"))) == Qtrue)
    sprintf(command, "%s --toggle-rotate-y-label", command);

  if ((val = rb_hash_aref(hash, rb_str_new2("m"))) != Qnil)
    sprintf(command, "%s -m %d", command, (int) FIX2INT(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("S"))) != Qnil)
    sprintf(command, "%s -S %d", command, (int) FIX2INT(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("W"))) != Qnil)
    sprintf(command, "%s -W %f", command, NUM2DBL(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("q"))) != Qnil)
    sprintf(command, "%s -q %f", command, NUM2DBL(val));

  if ((val = rb_hash_aref(hash, rb_str_new2("symbol-font-name"))) != Qnil)
    sprintf(command, "%s --symbol-font-name %s", command, STR2CSTR(val));

  if ((val = rb_hash_aref(hash, rb_str_new2("reposition"))) != Qnil)
    sprintf(command, "%s --reposition %s", command, STR2CSTR(val));
  if ((val = rb_hash_aref(hash, rb_str_new2("blankout"))) != Qnil)
    sprintf(command, "%s --blankout %s", command, STR2CSTR(val));

  if ((val = rb_hash_aref(hash, rb_str_new2("O"))) == Qtrue)
    sprintf(command, "%s -O", command);
}