1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 23:59:41 +02:00

LabelTrack exposes MakeInterval, to be reused

This commit is contained in:
Paul Licameli 2020-09-20 14:02:49 -04:00 committed by James Crook
parent 9b1901c971
commit 10679276a0
2 changed files with 26 additions and 9 deletions

View File

@ -84,26 +84,41 @@ LabelTrack::LabelTrack(const LabelTrack &orig) :
}
}
template< typename Container >
static Container MakeIntervals(const LabelArray &labels)
template<typename IntervalType>
static IntervalType DoMakeInterval(const LabelStruct &label, size_t index)
{
return {
label.getT0(), label.getT1(),
std::make_unique<LabelTrack::IntervalData>( index ) };
}
auto LabelTrack::MakeInterval( size_t index ) const -> ConstInterval
{
return DoMakeInterval<ConstInterval>(mLabels[index], index);
}
auto LabelTrack::MakeInterval( size_t index ) -> Interval
{
return DoMakeInterval<Interval>(mLabels[index], index);
}
template< typename Container, typename LabelTrack >
static Container DoMakeIntervals(LabelTrack &track)
{
Container result;
size_t ii = 0;
for (const auto &label : labels)
result.emplace_back(
label.getT0(), label.getT1(),
std::make_unique<LabelTrack::IntervalData>( ii++ ) );
for (size_t ii = 0, nn = track.GetNumLabels(); ii < nn; ++ii)
result.emplace_back( track.MakeInterval( ii ) );
return result;
}
auto LabelTrack::GetIntervals() const -> ConstIntervals
{
return MakeIntervals<ConstIntervals>(mLabels);
return DoMakeIntervals<ConstIntervals>(*this);
}
auto LabelTrack::GetIntervals() -> Intervals
{
return MakeIntervals<Intervals>(mLabels);
return DoMakeIntervals<Intervals>(*this);
}
void LabelTrack::SetLabel( size_t iLabel, const LabelStruct &newLabel )

View File

@ -159,6 +159,8 @@ public:
size_t index;
explicit IntervalData(size_t index) : index{index} {};
};
ConstInterval MakeInterval ( size_t index ) const;
Interval MakeInterval ( size_t index );
ConstIntervals GetIntervals() const override;
Intervals GetIntervals() override;