Extract extractRepeatedInterval() helper
This commit is contained in:
parent
8339163fe5
commit
53e36cba0c
|
|
@ -55,6 +55,21 @@ const stripComments = (intervals: Interval[]): Interval[] => {
|
||||||
return intervals.map(({ comments, ...rest }) => ({ comments: [], ...rest }));
|
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;
|
const isRangeInterval = (interval: Interval): boolean => interval.intensity instanceof IntensityRange;
|
||||||
|
|
||||||
export const detectRepeats = (intervals: Interval[]): (Interval | RepeatedInterval)[] => {
|
export const detectRepeats = (intervals: Interval[]): (Interval | RepeatedInterval)[] => {
|
||||||
|
|
@ -72,16 +87,10 @@ export const detectRepeats = (intervals: Interval[]): (Interval | RepeatedInterv
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const reference = intervals.slice(i, i + windowSize);
|
const repeatedInterval = extractRepeatedInterval(intervals, i);
|
||||||
const repeats = countRepetitions(reference, intervals, i);
|
if (repeatedInterval) {
|
||||||
if (repeats > 1) {
|
processed.push(repeatedInterval);
|
||||||
processed.push({
|
i += repeatedInterval.times * windowSize;
|
||||||
type: "repeat",
|
|
||||||
times: repeats,
|
|
||||||
intervals: stripComments(reference),
|
|
||||||
comments: collectComments(intervals.slice(i, i + windowSize * repeats)),
|
|
||||||
});
|
|
||||||
i += repeats * windowSize;
|
|
||||||
} else {
|
} else {
|
||||||
processed.push(intervals[i]);
|
processed.push(intervals[i]);
|
||||||
i++;
|
i++;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue