MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ merge_intervals()

std::vector< std::pair< size_t, size_t > > MayaFlux::Kinesis::Discrete::merge_intervals ( const std::vector< std::pair< size_t, size_t > > &  intervals)

Merge overlapping or adjacent half-open intervals.

Parameters
intervalsUnsorted [start, end) pairs
Returns
Sorted, non-overlapping merged intervals

Definition at line 14 of file Extract.cpp.

16{
17 if (intervals.empty())
18 return {};
19
20 auto sorted = intervals;
21 std::ranges::sort(sorted, [](const auto& a, const auto& b) { return a.first < b.first; });
22
23 std::vector<std::pair<size_t, size_t>> merged;
24 merged.push_back(sorted[0]);
25
26 for (size_t i = 1; i < sorted.size(); ++i) {
27 auto& last = merged.back();
28 const auto& cur = sorted[i];
29 if (cur.first <= last.second) {
30 last.second = std::max(last.second, cur.second);
31 } else {
32 merged.push_back(cur);
33 }
34 }
35
36 return merged;
37}
size_t a
size_t b

References a, and b.

Referenced by MayaFlux::Yantra::extract_above_mean(), MayaFlux::Yantra::extract_high_energy(), MayaFlux::Yantra::extract_high_spectral(), MayaFlux::Yantra::extract_onsets(), MayaFlux::Yantra::extract_outliers(), MayaFlux::Yantra::extract_peaks(), MayaFlux::Yantra::extract_silence(), and MayaFlux::Yantra::extract_zero_crossings().

+ Here is the caller graph for this function: