]> git.tdb.fi Git - libs/math.git/commitdiff
Move the Knot struct out of Spline
authorMikko Rasa <tdb@tdb.fi>
Tue, 4 Jun 2019 13:37:36 +0000 (16:37 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 4 Jun 2019 13:51:53 +0000 (16:51 +0300)
It doesn't depend on the degree of the spline, so this will generate less
different types and make it easier to create splines of different degrees
from the same knots.

source/interpolate/spline.h

index 67c8df07d9b9e24904b868ab1950762d7d95c58c..c801188e695cfb4f1c6a51c75368332ad5af53e9 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <algorithm>
 #include <vector>
+#include "knot.h"
 #include "polynomial.h"
 
 namespace Msp {
@@ -24,6 +25,17 @@ struct SplineValue<T, 1>
        static Type make(const T *v) { return *v; }
 };
 
+template<typename T, unsigned N>
+struct SplineKnot
+{
+       typedef typename SplineValue<T, N>::Type Value;
+       T x;
+       Value y;
+
+       SplineKnot(): x(T()) { }
+       SplineKnot(T x_, const Value &y_): x(x_), y(y_) { }
+};
+
 /**
 Stores a spline of degree D.  It is a piecewise polynomial function with value
 continuity.  Derivatives are not guaranteed to be continuous.
@@ -39,15 +51,7 @@ class Spline
 {
 public:
        typedef typename SplineValue<T, N>::Type Value;
-
-       struct Knot
-       {
-               T x;
-               Value y;
-
-               Knot(): x(T()) { }
-               Knot(T x_, const Value &y_): x(x_), y(y_) { }
-       };
+       typedef SplineKnot<T, N> Knot;
 
        struct Segment
        {