1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-23 17:30:17 +01: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 > template<typename IntervalType>
static Container MakeIntervals(const LabelArray &labels) 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; Container result;
size_t ii = 0; for (size_t ii = 0, nn = track.GetNumLabels(); ii < nn; ++ii)
for (const auto &label : labels) result.emplace_back( track.MakeInterval( ii ) );
result.emplace_back(
label.getT0(), label.getT1(),
std::make_unique<LabelTrack::IntervalData>( ii++ ) );
return result; return result;
} }
auto LabelTrack::GetIntervals() const -> ConstIntervals auto LabelTrack::GetIntervals() const -> ConstIntervals
{ {
return MakeIntervals<ConstIntervals>(mLabels); return DoMakeIntervals<ConstIntervals>(*this);
} }
auto LabelTrack::GetIntervals() -> Intervals auto LabelTrack::GetIntervals() -> Intervals
{ {
return MakeIntervals<Intervals>(mLabels); return DoMakeIntervals<Intervals>(*this);
} }
void LabelTrack::SetLabel( size_t iLabel, const LabelStruct &newLabel ) void LabelTrack::SetLabel( size_t iLabel, const LabelStruct &newLabel )

View File

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