TrackList inherits std::enable_shared_from_this
This commit is contained in:
parent
41175e94cd
commit
47fa651d79
|
@ -573,9 +573,7 @@ TrackList::TrackList()
|
|||
// Factory function
|
||||
std::shared_ptr<TrackList> TrackList::Create()
|
||||
{
|
||||
std::shared_ptr<TrackList> result{ safenew TrackList{} };
|
||||
result->mSelf = result;
|
||||
return result;
|
||||
return std::make_shared<TrackList>();
|
||||
}
|
||||
|
||||
TrackList &TrackList::operator= (TrackList &&that)
|
||||
|
@ -600,8 +598,10 @@ void TrackList::Swap(TrackList &that)
|
|||
(*it)->SetOwner(bSelf, {it, &b});
|
||||
};
|
||||
|
||||
SwapLOTs( *this, mSelf, that, that.mSelf );
|
||||
SwapLOTs( this->mPendingUpdates, mSelf, that.mPendingUpdates, that.mSelf );
|
||||
const auto self = shared_from_this();
|
||||
const auto otherSelf = that.shared_from_this();
|
||||
SwapLOTs( *this, self, that, otherSelf );
|
||||
SwapLOTs( this->mPendingUpdates, self, that.mPendingUpdates, otherSelf );
|
||||
mUpdaters.swap(that.mUpdaters);
|
||||
}
|
||||
|
||||
|
@ -709,7 +709,7 @@ void TrackList::Permute(const std::vector<TrackNodePointer> &permutation)
|
|||
ListOfTracks::value_type track = *iter.first;
|
||||
erase(iter.first);
|
||||
Track *pTrack = track.get();
|
||||
pTrack->SetOwner(mSelf,
|
||||
pTrack->SetOwner(shared_from_this(),
|
||||
{ insert(ListOfTracks::end(), track), this });
|
||||
}
|
||||
auto n = getBegin();
|
||||
|
@ -733,7 +733,7 @@ Track *TrackList::DoAddToHead(const std::shared_ptr<Track> &t)
|
|||
Track *pTrack = t.get();
|
||||
push_front(ListOfTracks::value_type(t));
|
||||
auto n = getBegin();
|
||||
pTrack->SetOwner(mSelf, n);
|
||||
pTrack->SetOwner(shared_from_this(), n);
|
||||
pTrack->SetId( TrackId{ ++sCounter } );
|
||||
RecalcPositions(n);
|
||||
AdditionEvent(n);
|
||||
|
@ -746,7 +746,7 @@ Track *TrackList::DoAdd(const std::shared_ptr<Track> &t)
|
|||
|
||||
auto n = getPrev( getEnd() );
|
||||
|
||||
t->SetOwner(mSelf, n);
|
||||
t->SetOwner(shared_from_this(), n);
|
||||
t->SetId( TrackId{ ++sCounter } );
|
||||
RecalcPositions(n);
|
||||
AdditionEvent(n);
|
||||
|
@ -817,7 +817,7 @@ auto TrackList::Replace(Track * t, const ListOfTracks::value_type &with) ->
|
|||
|
||||
Track *pTrack = with.get();
|
||||
*node.first = with;
|
||||
pTrack->SetOwner(mSelf, node);
|
||||
pTrack->SetOwner(shared_from_this(), node);
|
||||
pTrack->SetId( t->GetId() );
|
||||
RecalcPositions(node);
|
||||
|
||||
|
@ -991,7 +991,7 @@ void TrackList::SwapNodes(TrackNodePointer s1, TrackNodePointer s2)
|
|||
pTrack = pointer.get(),
|
||||
// Insert before s, and reassign s to point at the new node before
|
||||
// old s; which is why we saved pointers in backwards order
|
||||
pTrack->SetOwner(mSelf,
|
||||
pTrack->SetOwner(shared_from_this(),
|
||||
s = { insert(s.first, pointer), this } );
|
||||
};
|
||||
// This does not invalidate s2 even when it equals s1:
|
||||
|
@ -1208,7 +1208,7 @@ TrackList::RegisterPendingChangedTrack( Updater updater, Track *src )
|
|||
mPendingUpdates.push_back( pTrack );
|
||||
auto n = mPendingUpdates.end();
|
||||
--n;
|
||||
pTrack->SetOwner(mSelf, {n, &mPendingUpdates});
|
||||
pTrack->SetOwner(shared_from_this(), {n, &mPendingUpdates});
|
||||
}
|
||||
|
||||
return pTrack;
|
||||
|
@ -1312,7 +1312,7 @@ bool TrackList::ApplyPendingTracks()
|
|||
auto iter = ListOfTracks::begin();
|
||||
std::advance( iter, pendingTrack->GetIndex() );
|
||||
iter = ListOfTracks::insert( iter, pendingTrack );
|
||||
pendingTrack->SetOwner( mSelf, {iter, this} );
|
||||
pendingTrack->SetOwner( shared_from_this(), {iter, this} );
|
||||
pendingTrack->SetId( TrackId{ ++sCounter } );
|
||||
if (!inserted) {
|
||||
first = iter;
|
||||
|
|
10
src/Track.h
10
src/Track.h
|
@ -1165,13 +1165,11 @@ wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
|
|||
EVT_TRACKLIST_DELETION, TrackListEvent);
|
||||
|
||||
class TrackList final : public wxEvtHandler, public ListOfTracks
|
||||
, public std::enable_shared_from_this<TrackList>
|
||||
{
|
||||
// privatize this, make you use Swap instead:
|
||||
using ListOfTracks::swap;
|
||||
|
||||
// Create an empty TrackList
|
||||
TrackList();
|
||||
|
||||
// Disallow copy
|
||||
TrackList(const TrackList &that) = delete;
|
||||
TrackList &operator= (const TrackList&) = delete;
|
||||
|
@ -1183,6 +1181,10 @@ class TrackList final : public wxEvtHandler, public ListOfTracks
|
|||
void clear() = delete;
|
||||
|
||||
public:
|
||||
// Create an empty TrackList
|
||||
// Don't call directly -- use Create() instead
|
||||
TrackList();
|
||||
|
||||
// Create an empty TrackList
|
||||
static std::shared_ptr<TrackList> Create();
|
||||
|
||||
|
@ -1557,8 +1559,6 @@ private:
|
|||
|
||||
void SwapNodes(TrackNodePointer s1, TrackNodePointer s2);
|
||||
|
||||
std::weak_ptr<TrackList> mSelf;
|
||||
|
||||
// Nondecreasing during the session.
|
||||
// Nonpersistent.
|
||||
// Used to assign ids to added tracks.
|
||||
|
|
Loading…
Reference in New Issue