diff --git a/src/2geom/piecewise.h b/src/2geom/piecewise.h
index 8992c0097d3987f6d740fc8568c770506a9dc107..96e64bcf9e40ba3ab53e9dedbf7e2d32c6ce85d4 100644 (file)
--- a/src/2geom/piecewise.h
+++ b/src/2geom/piecewise.h
}
std::vector<double> roots(Piecewise<SBasis> const &f);
-Piecewise<SBasis> reverse(Piecewise<SBasis> const &f);
+
+template<typename T>
+Piecewise<T> reverse(Piecewise<T> const &f) {
+ Piecewise<T> ret = Piecewise<T>();
+ ret.cuts.resize(f.cuts.size());
+ ret.segs.resize(f.segs.size());
+ double start = f.cuts[0];
+ double end = f.cuts.back();
+ for (unsigned i = 0; i < f.cuts.size(); i++) {
+ double x = f.cuts[f.cuts.size() - 1 - i];
+ ret.cuts[i] = end - (x - start);
+ }
+ for (unsigned i = 0; i < f.segs.size(); i++)
+ ret.segs[i] = reverse(f[f.segs.size() - i - 1]);
+ return ret;
+}
+
}