mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-26 00:03:52 +02:00
Simplify iterations over cutlines in WaveClip.cpp; stl idioms
This commit is contained in:
committed by
Paul Licameli
parent
77a3647922
commit
bd57f6392f
105
src/WaveClip.cpp
105
src/WaveClip.cpp
@@ -321,8 +321,8 @@ WaveClip::WaveClip(const WaveClip& orig, DirManager *projDirManager)
|
|||||||
mSpecCache = std::make_unique<SpecCache>();
|
mSpecCache = std::make_unique<SpecCache>();
|
||||||
mSpecPxCache = std::make_unique<SpecPxCache>(1);
|
mSpecPxCache = std::make_unique<SpecPxCache>(1);
|
||||||
|
|
||||||
for (WaveClipList::compatibility_iterator it=orig.mCutLines.GetFirst(); it; it=it->GetNext())
|
for (const auto &clip: orig.mCutLines)
|
||||||
mCutLines.Append(new WaveClip(*it->GetData(), projDirManager));
|
mCutLines.push_back(new WaveClip(*clip, projDirManager));
|
||||||
|
|
||||||
mAppendBufferLen = 0;
|
mAppendBufferLen = 0;
|
||||||
mDirty = 0;
|
mDirty = 0;
|
||||||
@@ -331,8 +331,9 @@ WaveClip::WaveClip(const WaveClip& orig, DirManager *projDirManager)
|
|||||||
|
|
||||||
WaveClip::~WaveClip()
|
WaveClip::~WaveClip()
|
||||||
{
|
{
|
||||||
mCutLines.DeleteContents(true);
|
for (const auto &clip : mCutLines)
|
||||||
mCutLines.Clear();
|
delete clip;
|
||||||
|
mCutLines.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveClip::SetOffset(double offset)
|
void WaveClip::SetOffset(double offset)
|
||||||
@@ -1365,7 +1366,7 @@ XMLTagHandler *WaveClip::HandleXMLChild(const wxChar *tag)
|
|||||||
// Nested wave clips are cut lines
|
// Nested wave clips are cut lines
|
||||||
WaveClip *newCutLine = new WaveClip(mSequence->GetDirManager(),
|
WaveClip *newCutLine = new WaveClip(mSequence->GetDirManager(),
|
||||||
mSequence->GetSampleFormat(), mRate);
|
mSequence->GetSampleFormat(), mRate);
|
||||||
mCutLines.Append(newCutLine);
|
mCutLines.push_back(newCutLine);
|
||||||
return newCutLine;
|
return newCutLine;
|
||||||
} else
|
} else
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -1379,8 +1380,8 @@ void WaveClip::WriteXML(XMLWriter &xmlFile)
|
|||||||
mSequence->WriteXML(xmlFile);
|
mSequence->WriteXML(xmlFile);
|
||||||
mEnvelope->WriteXML(xmlFile);
|
mEnvelope->WriteXML(xmlFile);
|
||||||
|
|
||||||
for (WaveClipList::compatibility_iterator it=mCutLines.GetFirst(); it; it=it->GetNext())
|
for (const auto &clip: mCutLines)
|
||||||
it->GetData()->WriteXML(xmlFile);
|
clip->WriteXML(xmlFile);
|
||||||
|
|
||||||
xmlFile.EndTag(wxT("waveclip"));
|
xmlFile.EndTag(wxT("waveclip"));
|
||||||
}
|
}
|
||||||
@@ -1444,13 +1445,12 @@ bool WaveClip::Paste(double t0, const WaveClip* other)
|
|||||||
OffsetCutLines(t0, pastedClip->GetEndTime() - pastedClip->GetStartTime());
|
OffsetCutLines(t0, pastedClip->GetEndTime() - pastedClip->GetStartTime());
|
||||||
|
|
||||||
// Paste cut lines contained in pasted clip
|
// Paste cut lines contained in pasted clip
|
||||||
for (WaveClipList::compatibility_iterator it = pastedClip->mCutLines.GetFirst(); it; it=it->GetNext())
|
for (const auto &cutline: pastedClip->mCutLines)
|
||||||
{
|
{
|
||||||
WaveClip* cutline = it->GetData();
|
|
||||||
WaveClip* newCutLine = new WaveClip(*cutline,
|
WaveClip* newCutLine = new WaveClip(*cutline,
|
||||||
mSequence->GetDirManager());
|
mSequence->GetDirManager());
|
||||||
newCutLine->Offset(t0 - mOffset);
|
newCutLine->Offset(t0 - mOffset);
|
||||||
mCutLines.Append(newCutLine);
|
mCutLines.push_back(newCutLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
result = true;
|
result = true;
|
||||||
@@ -1505,22 +1505,24 @@ bool WaveClip::Clear(double t0, double t1)
|
|||||||
if (clip_t1 > GetEndTime())
|
if (clip_t1 > GetEndTime())
|
||||||
clip_t1 = GetEndTime();
|
clip_t1 = GetEndTime();
|
||||||
|
|
||||||
WaveClipList::compatibility_iterator nextIt;
|
// May delete as we iterate, so don't use range-for
|
||||||
|
for (auto it = mCutLines.begin(); it != mCutLines.end();)
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=nextIt)
|
|
||||||
{
|
{
|
||||||
nextIt = it->GetNext();
|
WaveClip* clip = *it;
|
||||||
WaveClip* clip = it->GetData();
|
|
||||||
double cutlinePosition = mOffset + clip->GetOffset();
|
double cutlinePosition = mOffset + clip->GetOffset();
|
||||||
if (cutlinePosition >= t0 && cutlinePosition <= t1)
|
if (cutlinePosition >= t0 && cutlinePosition <= t1)
|
||||||
{
|
{
|
||||||
// This cutline is within the area, DELETE it
|
// This cutline is within the area, DELETE it
|
||||||
delete clip;
|
delete clip;
|
||||||
mCutLines.DeleteNode(it);
|
it = mCutLines.erase(it);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (cutlinePosition >= t1)
|
if (cutlinePosition >= t1)
|
||||||
{
|
{
|
||||||
clip->Offset(clip_t0-clip_t1);
|
clip->Offset(clip_t0 - clip_t1);
|
||||||
|
}
|
||||||
|
++it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1556,22 +1558,24 @@ bool WaveClip::ClearAndAddCutLine(double t0, double t1)
|
|||||||
newClip->SetOffset(clip_t0-mOffset);
|
newClip->SetOffset(clip_t0-mOffset);
|
||||||
|
|
||||||
// Sort out cutlines that belong to the NEW cutline
|
// Sort out cutlines that belong to the NEW cutline
|
||||||
WaveClipList::compatibility_iterator nextIt;
|
// May delete as we iterate, so don't use range-for
|
||||||
|
for (auto it = mCutLines.begin(); it != mCutLines.end();)
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=nextIt)
|
|
||||||
{
|
{
|
||||||
nextIt = it->GetNext();
|
WaveClip* clip = *it;
|
||||||
WaveClip* clip = it->GetData();
|
|
||||||
double cutlinePosition = mOffset + clip->GetOffset();
|
double cutlinePosition = mOffset + clip->GetOffset();
|
||||||
if (cutlinePosition >= t0 && cutlinePosition <= t1)
|
if (cutlinePosition >= t0 && cutlinePosition <= t1)
|
||||||
{
|
{
|
||||||
clip->SetOffset(cutlinePosition - newClip->GetOffset() - mOffset);
|
clip->SetOffset(cutlinePosition - newClip->GetOffset() - mOffset);
|
||||||
newClip->mCutLines.Append(clip);
|
newClip->mCutLines.push_back(clip);
|
||||||
mCutLines.DeleteNode(it);
|
it = mCutLines.erase(it);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (cutlinePosition >= t1)
|
if (cutlinePosition >= t1)
|
||||||
{
|
{
|
||||||
clip->Offset(clip_t0-clip_t1);
|
clip->Offset(clip_t0 - clip_t1);
|
||||||
|
}
|
||||||
|
++it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1590,9 +1594,10 @@ bool WaveClip::ClearAndAddCutLine(double t0, double t1)
|
|||||||
|
|
||||||
MarkChanged();
|
MarkChanged();
|
||||||
|
|
||||||
mCutLines.Append(newClip);
|
mCutLines.push_back(newClip);
|
||||||
return true;
|
return true;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
delete newClip;
|
delete newClip;
|
||||||
return false;
|
return false;
|
||||||
@@ -1603,9 +1608,8 @@ bool WaveClip::FindCutLine(double cutLinePosition,
|
|||||||
double* cutlineStart /* = NULL */,
|
double* cutlineStart /* = NULL */,
|
||||||
double* cutlineEnd /* = NULL */)
|
double* cutlineEnd /* = NULL */)
|
||||||
{
|
{
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=it->GetNext())
|
for (const auto &cutline: mCutLines)
|
||||||
{
|
{
|
||||||
WaveClip* cutline = it->GetData();
|
|
||||||
if (fabs(mOffset + cutline->GetOffset() - cutLinePosition) < 0.0001)
|
if (fabs(mOffset + cutline->GetOffset() - cutLinePosition) < 0.0001)
|
||||||
{
|
{
|
||||||
if (cutlineStart)
|
if (cutlineStart)
|
||||||
@@ -1621,15 +1625,15 @@ bool WaveClip::FindCutLine(double cutLinePosition,
|
|||||||
|
|
||||||
bool WaveClip::ExpandCutLine(double cutLinePosition)
|
bool WaveClip::ExpandCutLine(double cutLinePosition)
|
||||||
{
|
{
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=it->GetNext())
|
for (auto it = mCutLines.begin(); it != mCutLines.end(); ++it)
|
||||||
{
|
{
|
||||||
WaveClip* cutline = it->GetData();
|
const auto &cutline = *it;
|
||||||
if (fabs(mOffset + cutline->GetOffset() - cutLinePosition) < 0.0001)
|
if (fabs(mOffset + cutline->GetOffset() - cutLinePosition) < 0.0001)
|
||||||
{
|
{
|
||||||
if (!Paste(mOffset+cutline->GetOffset(), cutline))
|
if (!Paste(mOffset+cutline->GetOffset(), cutline))
|
||||||
return false;
|
return false;
|
||||||
delete cutline;
|
delete cutline;
|
||||||
mCutLines.DeleteNode(it);
|
mCutLines.erase(it);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1639,12 +1643,13 @@ bool WaveClip::ExpandCutLine(double cutLinePosition)
|
|||||||
|
|
||||||
bool WaveClip::RemoveCutLine(double cutLinePosition)
|
bool WaveClip::RemoveCutLine(double cutLinePosition)
|
||||||
{
|
{
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=it->GetNext())
|
for (auto it = mCutLines.begin(); it != mCutLines.end(); ++it)
|
||||||
{
|
{
|
||||||
if (fabs(mOffset + it->GetData()->GetOffset() - cutLinePosition) < 0.0001)
|
const auto &cutline = *it;
|
||||||
|
if (fabs(mOffset + cutline->GetOffset() - cutLinePosition) < 0.0001)
|
||||||
{
|
{
|
||||||
delete it->GetData();
|
delete cutline;
|
||||||
mCutLines.DeleteNode(it);
|
mCutLines.erase(it);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1654,19 +1659,15 @@ bool WaveClip::RemoveCutLine(double cutLinePosition)
|
|||||||
|
|
||||||
void WaveClip::RemoveAllCutLines()
|
void WaveClip::RemoveAllCutLines()
|
||||||
{
|
{
|
||||||
while (!mCutLines.IsEmpty())
|
for (const auto &cutLine : mCutLines)
|
||||||
{
|
delete cutLine;
|
||||||
WaveClipList::compatibility_iterator head = mCutLines.GetFirst();
|
mCutLines.clear();
|
||||||
delete head->GetData();
|
|
||||||
mCutLines.DeleteNode(head);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveClip::OffsetCutLines(double t0, double len)
|
void WaveClip::OffsetCutLines(double t0, double len)
|
||||||
{
|
{
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=it->GetNext())
|
for (const auto &cutLine : mCutLines)
|
||||||
{
|
{
|
||||||
WaveClip* cutLine = it->GetData();
|
|
||||||
if (mOffset + cutLine->GetOffset() >= t0)
|
if (mOffset + cutLine->GetOffset() >= t0)
|
||||||
cutLine->Offset(len);
|
cutLine->Offset(len);
|
||||||
}
|
}
|
||||||
@@ -1675,22 +1676,22 @@ void WaveClip::OffsetCutLines(double t0, double len)
|
|||||||
void WaveClip::Lock()
|
void WaveClip::Lock()
|
||||||
{
|
{
|
||||||
GetSequence()->Lock();
|
GetSequence()->Lock();
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=it->GetNext())
|
for (const auto &cutline: mCutLines)
|
||||||
it->GetData()->Lock();
|
cutline->Lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveClip::CloseLock()
|
void WaveClip::CloseLock()
|
||||||
{
|
{
|
||||||
GetSequence()->CloseLock();
|
GetSequence()->CloseLock();
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=it->GetNext())
|
for (const auto &cutline: mCutLines)
|
||||||
it->GetData()->CloseLock();
|
cutline->CloseLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveClip::Unlock()
|
void WaveClip::Unlock()
|
||||||
{
|
{
|
||||||
GetSequence()->Unlock();
|
GetSequence()->Unlock();
|
||||||
for (WaveClipList::compatibility_iterator it = mCutLines.GetFirst(); it; it=it->GetNext())
|
for (const auto &cutline: mCutLines)
|
||||||
it->GetData()->Unlock();
|
cutline->Unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveClip::SetRate(int rate)
|
void WaveClip::SetRate(int rate)
|
||||||
|
|||||||
Reference in New Issue
Block a user