Make comparator configurable (for troughs)

This commit is contained in:
Chris Cannam
2022-05-19 15:25:33 +01:00
parent e9ad04e2b4
commit 5584ccc059

View File

@@ -29,7 +29,7 @@
namespace RubberBand namespace RubberBand
{ {
template <typename T> template <typename T, typename GreaterThan = std::greater<T>>
class Peak class Peak
{ {
public: public:
@@ -64,6 +64,7 @@ public:
{ {
int nPeaks = 0; int nPeaks = 0;
int n = rangeStart + rangeCount; int n = rangeStart + rangeCount;
GreaterThan greater;
for (int i = rangeStart; i < n; ++i) { for (int i = rangeStart; i < n; ++i) {
T x = v[i]; T x = v[i];
@@ -71,11 +72,11 @@ public:
for (int k = i - p; k <= i + p; ++k) { for (int k = i - p; k <= i + p; ++k) {
if (k < rangeStart || k == i) continue; if (k < rangeStart || k == i) continue;
if (k >= n) break; if (k >= n) break;
if (k < i && x <= v[k]) { if (k < i && !greater(x, v[k])) {
good = false; good = false;
break; break;
} }
if (k > i && x < v[k]) { if (k > i && greater(v[k], x)) {
good = false; good = false;
break; break;
} }