/** * The default constructor creates a new workspace of size n. * @param n The size of the workspace. */ explicit wavetable( size_t const n ){ ccgsl_pointer = gsl_fft_real_wavetable_float_alloc( n ); // just plausibly we could allocate wavetable_float but not count try { count = new size_t; } catch( std::bad_alloc& e ){ // try to tidy up before rethrowing gsl_fft_real_wavetable_float_free( ccgsl_pointer ); throw e; } *count = 1; // initially there is just one reference to ccgsl_pointer }
static PyObject* PyGSL_transform_space_init(PyObject *self, PyObject *args, const enum pygsl_transform_space_type type) { PyGSL_transform_space *o=NULL; size_t n; FUNC_MESS_BEGIN(); o = (PyGSL_transform_space *) PyObject_NEW(PyGSL_transform_space, &PyGSL_transform_space_pytype); if(o == NULL){ return NULL; } if (0==PyArg_ParseTuple(args,"l", &n)) return NULL; if (n<=0) { pygsl_error("dimension must be >0", filename, __LINE__, GSL_EINVAL); return NULL; } o->type = type; switch(type){ case COMPLEX_WORKSPACE: o->space.cws = gsl_fft_complex_workspace_alloc(n); break; case COMPLEX_WAVETABLE: o->space.cwt = gsl_fft_complex_wavetable_alloc(n); break; case REAL_WORKSPACE: o->space.rws = gsl_fft_real_workspace_alloc(n); break; case REAL_WAVETABLE: o->space.rwt = gsl_fft_real_wavetable_alloc(n); break; case HALFCOMPLEX_WAVETABLE: o->space.hcwt = gsl_fft_halfcomplex_wavetable_alloc(n); break; case COMPLEX_WORKSPACE_FLOAT: o->space.cwsf = gsl_fft_complex_workspace_float_alloc(n); break; case COMPLEX_WAVETABLE_FLOAT: o->space.cwtf = gsl_fft_complex_wavetable_float_alloc(n); break; case REAL_WORKSPACE_FLOAT: o->space.rwsf = gsl_fft_real_workspace_float_alloc(n); break; case REAL_WAVETABLE_FLOAT: o->space.rwtf = gsl_fft_real_wavetable_float_alloc(n); break; case HALFCOMPLEX_WAVETABLE_FLOAT: o->space.hcwtf = gsl_fft_halfcomplex_wavetable_float_alloc(n); break; #ifdef _PYGSL_GSL_HAS_WAVELET case WAVELET_WORKSPACE : o->space.wws = gsl_wavelet_workspace_alloc(n); break; #endif default: pygsl_error("Got unknown switch", filename, __LINE__, GSL_ESANITY); return NULL; break; } assert(o->space.v); FUNC_MESS_END(); return (PyObject *) o; }