Example #1
0
double* get_vector_ptr(VALUE ary, size_t *stride, size_t *n)
{
  gsl_vector *v = NULL;
  gsl_vector_complex *vc = NULL;
  gsl_matrix *m;
  if (VECTOR_P(ary)) {
    Data_Get_Struct(ary, gsl_vector, v);
    *stride = v->stride;
    *n = v->size;
    return v->data;
  } else if (VECTOR_COMPLEX_P(ary)) {
    Data_Get_Struct(ary, gsl_vector_complex, vc);
    *stride = vc->stride;
    *n = vc->size*2;
    return vc->data;
  } else if (MATRIX_P(ary)) {
    Data_Get_Struct(ary, gsl_matrix, m);
    *stride = 1;
    *n = m->size1*m->size2;
    return m->data;
#ifdef HAVE_NARRAY_H
  } else if (NA_IsNArray(ary)) {
    VALUE ary2;
    *n = NA_TOTAL(ary);
    *stride = 1;
    ary2 = na_change_type(ary, NA_DFLOAT);
    return NA_PTR_TYPE(ary2,double*);
#endif

#ifdef HAVE_NMATRIX_H
  } else if (NM_IsNMatrix(ary)) {
Example #2
0
VALUE rb_gsl_nary_eval1(VALUE ary, double (*f)(double))
{
  VALUE ary2;
  struct NARRAY *na;
  double *ptr1, *ptr2;
  size_t i, n;
  ary = na_change_type(ary, NA_DFLOAT);
  GetNArray(ary, na);
  ptr1 = (double *) na->ptr;
  n = na->total;
  ary2 = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(ary));
  ptr2 = NA_PTR_TYPE(ary2, double*);
  for (i = 0; i < n; i++) ptr2[i] = (*f)(ptr1[i]);
  return ary2;
}
Example #3
0
double* get_ptr_double3(VALUE obj, size_t *size, size_t *stride, int *flag)
{
  gsl_vector *v;
#ifdef HAVE_NARRAY_H
  double *ptr;
  struct NARRAY *na;
  if (NA_IsNArray(obj)) {
    obj = na_change_type(obj, NA_DFLOAT);
    GetNArray(obj, na);
    ptr = (double *) na->ptr;
    *size = na->total;
    *stride = 1;
    *flag = 1;
    return ptr;
  }
#endif
  CHECK_VECTOR(obj);
  Data_Get_Struct(obj, gsl_vector, v);
  *size = v->size;
  *stride = v->stride;
  *flag = 0;
  return v->data;
}