## Higher-level Interface

The functions described in the previous sections required the user to supply pointers to the x and y arrays on each call. The following functions are equivalent to the corresponding `gsl_interp` functions but maintain a copy of this data in the `gsl_spline` object. This removes the need to pass both xa and ya as arguments on each evaluation. These functions are defined in the header file ``gsl_spline.h'`.

Function: gsl_spline * gsl_spline_alloc (const gsl_interp_type * T, size_t n)

Function: int gsl_spline_init (gsl_spline * spline, const double xa[], const double ya[], size_t size)

Function: void gsl_spline_free (gsl_spline * spline)

Function: double gsl_spline_eval (const gsl_spline * spline, double x, gsl_interp_accel * a)
Function: int gsl_spline_eval_e (const gsl_spline * spline, double x, gsl_interp_accel * a, double * y)

Function: double gsl_spline_eval_deriv (const gsl_spline * spline, double x, gsl_interp_accel * a)
Function: int gsl_spline_eval_deriv_e (const gsl_spline * spline, double x, gsl_interp_accel * a, double * d)

Function: double gsl_spline_eval_deriv2 (const gsl_spline * spline, double x, gsl_interp_accel * a)
Function: int gsl_spline_eval_deriv2_e (const gsl_spline * spline, double x, gsl_interp_accel * a, double * d2)

Function: double gsl_spline_eval_integ (const gsl_spline * spline, double a, double b, gsl_interp_accel * acc)
Function: int gsl_spline_eval_integ_e (const gsl_spline * spline, double a, double b, gsl_interp_accel * acc, double * result)