|
Packit |
67cb25 |
#include <config.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_math.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_errno.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_sum.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_sum_levin_utrunc_workspace *
|
|
Packit |
67cb25 |
gsl_sum_levin_utrunc_alloc (size_t n)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
gsl_sum_levin_utrunc_workspace * w;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (n == 0)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
GSL_ERROR_VAL ("length n must be positive integer", GSL_EDOM, 0);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
w = (gsl_sum_levin_utrunc_workspace *) malloc(sizeof(gsl_sum_levin_utrunc_workspace));
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (w == NULL)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
GSL_ERROR_VAL ("failed to allocate struct", GSL_ENOMEM, 0);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
w->q_num = (double *) malloc (n * sizeof (double));
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (w->q_num == NULL)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
free(w) ; /* error in constructor, prevent memory leak */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
GSL_ERROR_VAL ("failed to allocate space for q_num", GSL_ENOMEM, 0);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
w->q_den = (double *) malloc (n * sizeof (double));
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (w->q_den == NULL)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
free (w->q_num);
|
|
Packit |
67cb25 |
free (w) ; /* error in constructor, prevent memory leak */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
GSL_ERROR_VAL ("failed to allocate space for q_den", GSL_ENOMEM, 0);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
w->dsum = (double *) malloc (n * sizeof (double));
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if (w->dsum == NULL)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
free (w->q_den);
|
|
Packit |
67cb25 |
free (w->q_num);
|
|
Packit |
67cb25 |
free (w) ; /* error in constructor, prevent memory leak */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
GSL_ERROR_VAL ("failed to allocate space for dsum", GSL_ENOMEM, 0);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
w->size = n;
|
|
Packit |
67cb25 |
w->terms_used = 0;
|
|
Packit |
67cb25 |
w->sum_plain = 0;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return w;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
void
|
|
Packit |
67cb25 |
gsl_sum_levin_utrunc_free (gsl_sum_levin_utrunc_workspace * w)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
RETURN_IF_NULL (w);
|
|
Packit |
67cb25 |
free (w->dsum);
|
|
Packit |
67cb25 |
free (w->q_den);
|
|
Packit |
67cb25 |
free (w->q_num);
|
|
Packit |
67cb25 |
free (w);
|
|
Packit |
67cb25 |
}
|