Define and use const version of WaveTrack::GetAllClips
This commit is contained in:
parent
3e5bfa0c12
commit
c09edbb18a
|
@ -78,18 +78,18 @@ UndoManager::~UndoManager()
|
|||
|
||||
namespace {
|
||||
SpaceArray::value_type
|
||||
CalculateUsage(TrackList *tracks, Set *seen)
|
||||
CalculateUsage(const TrackList &tracks, Set *seen)
|
||||
{
|
||||
SpaceArray::value_type result = 0;
|
||||
|
||||
//TIMER_START( "CalculateSpaceUsage", space_calc );
|
||||
for (auto wt : tracks->Any< WaveTrack >())
|
||||
for (auto wt : tracks.Any< const WaveTrack >())
|
||||
{
|
||||
// Scan all clips within current track
|
||||
for(const auto &clip : wt->GetAllClips())
|
||||
{
|
||||
// Scan all blockfiles within current clip
|
||||
BlockArray *blocks = clip->GetSequenceBlockArray();
|
||||
auto blocks = clip->GetSequenceBlockArray();
|
||||
for (const auto &block : *blocks)
|
||||
{
|
||||
const auto &file = block.f;
|
||||
|
@ -137,12 +137,12 @@ void UndoManager::CalculateSpaceUsage()
|
|||
for (size_t nn = stack.size(); nn--;)
|
||||
{
|
||||
// Scan all tracks at current level
|
||||
auto tracks = stack[nn]->state.tracks.get();
|
||||
auto &tracks = *stack[nn]->state.tracks;
|
||||
space[nn] = CalculateUsage(tracks, &seen);
|
||||
}
|
||||
|
||||
mClipboardSpaceUsage = CalculateUsage
|
||||
(AudacityProject::GetClipboardTracks(), nullptr);
|
||||
mClipboardSpaceUsage = CalculateUsage(
|
||||
*AudacityProject::GetClipboardTracks(), nullptr);
|
||||
|
||||
//TIMER_STOP( space_calc );
|
||||
}
|
||||
|
|
|
@ -416,6 +416,11 @@ BlockArray* WaveClip::GetSequenceBlockArray()
|
|||
return &mSequence->GetBlockArray();
|
||||
}
|
||||
|
||||
const BlockArray* WaveClip::GetSequenceBlockArray() const
|
||||
{
|
||||
return &mSequence->GetBlockArray();
|
||||
}
|
||||
|
||||
double WaveClip::GetStartTime() const
|
||||
{
|
||||
// JS: mOffset is the minimum value and it is returned; no clipping to 0
|
||||
|
|
|
@ -238,6 +238,7 @@ public:
|
|||
Envelope* GetEnvelope() { return mEnvelope.get(); }
|
||||
const Envelope* GetEnvelope() const { return mEnvelope.get(); }
|
||||
BlockArray* GetSequenceBlockArray();
|
||||
const BlockArray* GetSequenceBlockArray() const;
|
||||
|
||||
// Get low-level access to the sequence. Whenever possible, don't use this,
|
||||
// but use more high-level functions inside WaveClip (or add them if you
|
||||
|
|
|
@ -374,7 +374,7 @@ private:
|
|||
const WaveClipConstHolders &GetClips() const
|
||||
{ return reinterpret_cast< const WaveClipConstHolders& >( mClips ); }
|
||||
|
||||
// Get access to all clips (in some unspecified sequence),
|
||||
// Get mutative access to all clips (in some unspecified sequence),
|
||||
// including those hidden in cutlines.
|
||||
class AllClipsIterator
|
||||
: public ValueIterator< WaveClip * >
|
||||
|
@ -400,12 +400,12 @@ private:
|
|||
AllClipsIterator &operator ++ ();
|
||||
|
||||
// Define == well enough to serve for loop termination test
|
||||
friend bool operator ==
|
||||
(const AllClipsIterator &a, const AllClipsIterator &b)
|
||||
friend bool operator == (
|
||||
const AllClipsIterator &a, const AllClipsIterator &b)
|
||||
{ return a.mStack.empty() == b.mStack.empty(); }
|
||||
|
||||
friend bool operator !=
|
||||
(const AllClipsIterator &a, const AllClipsIterator &b)
|
||||
friend bool operator != (
|
||||
const AllClipsIterator &a, const AllClipsIterator &b)
|
||||
{ return !( a == b ); }
|
||||
|
||||
private:
|
||||
|
@ -419,11 +419,49 @@ private:
|
|||
Stack mStack;
|
||||
};
|
||||
|
||||
// Get const access to all clips (in some unspecified sequence),
|
||||
// including those hidden in cutlines.
|
||||
class AllClipsConstIterator
|
||||
: public ValueIterator< const WaveClip * >
|
||||
{
|
||||
public:
|
||||
// Constructs an "end" iterator
|
||||
AllClipsConstIterator () {}
|
||||
|
||||
// Construct a "begin" iterator
|
||||
explicit AllClipsConstIterator( const WaveTrack &track )
|
||||
: mIter{ const_cast< WaveTrack& >( track ) }
|
||||
{}
|
||||
|
||||
const WaveClip *operator * () const
|
||||
{ return *mIter; }
|
||||
|
||||
AllClipsConstIterator &operator ++ ()
|
||||
{ ++mIter; return *this; }
|
||||
|
||||
// Define == well enough to serve for loop termination test
|
||||
friend bool operator == (
|
||||
const AllClipsConstIterator &a, const AllClipsConstIterator &b)
|
||||
{ return a.mIter == b.mIter; }
|
||||
|
||||
friend bool operator != (
|
||||
const AllClipsConstIterator &a, const AllClipsConstIterator &b)
|
||||
{ return !( a == b ); }
|
||||
|
||||
private:
|
||||
AllClipsIterator mIter;
|
||||
};
|
||||
|
||||
IteratorRange< AllClipsIterator > GetAllClips()
|
||||
{
|
||||
return { AllClipsIterator{ *this }, AllClipsIterator{ } };
|
||||
}
|
||||
|
||||
|
||||
IteratorRange< AllClipsConstIterator > GetAllClips() const
|
||||
{
|
||||
return { AllClipsConstIterator{ *this }, AllClipsConstIterator{ } };
|
||||
}
|
||||
|
||||
// Create NEW clip and add it to this track. Returns a pointer
|
||||
// to the newly created clip.
|
||||
WaveClip* CreateClip();
|
||||
|
|
Loading…
Reference in New Issue