#ifndef BSPLINE_H
#define BSPLINE_H
#endif

#include <stdint.h>
#include <stdbool.h>

#include "util/interval.h"
#include "util/vec3f.h"
#include "util/box.h"

float bspline_base(const float xx, const int n);
float d_bspline_base(const float x, const int n);
float bspline(const float x, const int n, const float x0, const float h);
float d_bspline(const float x, const int n, const float x0, const float h);
float bspline_3(const Vec3f X, const int n, const Vec3f X0, const float h);
float dx_bspline_3(const Vec3f X, const int n, const Vec3f X0, const float h);
float dy_bspline_3(const Vec3f X, const int n, const Vec3f X0, const float h);
float dz_bspline_3(const Vec3f X, const int n, const Vec3f X0, const float h);
Vec3f grad_bspline_3(const Vec3f X, const int n, const Vec3f X0, const float h);
Box bspline_support(const int n, const Vec3f X0, const float h);


/*
float b_spline(const float xx, const int n);
float d_b_spline(const float x, const int n);
float b_spline_k(const float x, const int n, const Interval I);
float d_b_spline_k(const float x, const int n, const Interval I);
float b_spline_3k(const Vec3f X, const int n, const Interval Ix, const Interval Iy, const Interval Iz);
float dx_b_spline_3k(const Vec3f X, const int n, const Interval Ix, const Interval Iy, const Interval Iz);
float dy_b_spline_3k(const Vec3f X, const int n, const Interval Ix, const Interval Iy, const Interval Iz);
float dz_b_spline_3k(const Vec3f X, const int n, const Interval Ix, const Interval Iy, const Interval Iz);
*/
