Extract extractRepeatedInterval() helper

This commit is contained in:
Rene Saarsoo 2020-09-26 12:57:26 +03:00
parent 8339163fe5
commit 53e36cba0c
1 changed files with 19 additions and 10 deletions

View File

@ -55,6 +55,21 @@ const stripComments = (intervals: Interval[]): Interval[] => {
return intervals.map(({ comments, ...rest }) => ({ comments: [], ...rest }));
};
const extractRepeatedInterval = (intervals: Interval[], i: number): RepeatedInterval | undefined => {
const reference = intervals.slice(i, i + windowSize);
const repeats = countRepetitions(reference, intervals, i);
if (repeats === 1) {
return undefined;
}
return {
type: "repeat",
times: repeats,
intervals: stripComments(reference),
comments: collectComments(intervals.slice(i, i + windowSize * repeats)),
};
};
const isRangeInterval = (interval: Interval): boolean => interval.intensity instanceof IntensityRange;
export const detectRepeats = (intervals: Interval[]): (Interval | RepeatedInterval)[] => {
@ -72,16 +87,10 @@ export const detectRepeats = (intervals: Interval[]): (Interval | RepeatedInterv
continue;
}
const reference = intervals.slice(i, i + windowSize);
const repeats = countRepetitions(reference, intervals, i);
if (repeats > 1) {
processed.push({
type: "repeat",
times: repeats,
intervals: stripComments(reference),
comments: collectComments(intervals.slice(i, i + windowSize * repeats)),
});
i += repeats * windowSize;
const repeatedInterval = extractRepeatedInterval(intervals, i);
if (repeatedInterval) {
processed.push(repeatedInterval);
i += repeatedInterval.times * windowSize;
} else {
processed.push(intervals[i]);
i++;