diff --git a/src/Menus.cpp b/src/Menus.cpp index 46d030459..7d601b136 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -2912,7 +2912,7 @@ void AudacityProject::SortTracks(int flags) // This one place outside of TrackList where we must use undisguised // std::list iterators! Avoid this elsewhere! std::vector arr; - arr.reserve(mTracks->GetCount()); + arr.reserve(mTracks->size()); bool lastTrackLinked = false; //sort by linked tracks. Assumes linked track follows owner in list. @@ -4332,7 +4332,7 @@ bool AudacityProject::DoEffect(const PluginID & ID, int flags) wxGetApp().SetMissingAliasedFileWarningShouldShow(true); - int nTracksOriginally = GetTrackCount(); + auto nTracksOriginally = GetTrackCount(); TrackListIterator iter(GetTracks()); Track *t = iter.First(); WaveTrack *newTrack{}; diff --git a/src/Project.cpp b/src/Project.cpp index be27b6674..2d6b888d8 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -1484,7 +1484,7 @@ void AudacityProject::SetProjectTitle( int number) bool AudacityProject::GetIsEmpty() { - return mTracks->IsEmpty(); + return mTracks->empty(); } bool AudacityProject::SnapSelection() @@ -2896,7 +2896,7 @@ void AudacityProject::OpenFiles(AudacityProject *proj) // there are no tracks, but there's an Undo history, etc, then // bad things can happen, including data files moving to the NEW // project directory, etc. - if ( proj && ( proj->mDirty || !proj->mTracks->IsEmpty() ) ) + if ( proj && ( proj->mDirty || !proj->mTracks->empty() ) ) proj = nullptr; // This project is clean; it's never been touched. Therefore @@ -4145,7 +4145,7 @@ AudacityProject::AddImportedTracks(const wxString &fileName, const auto numTracks = newTracks.size(); SelectNone(); - bool initiallyEmpty = mTracks->IsEmpty(); + bool initiallyEmpty = mTracks->empty(); double newRate = 0; wxString trackNameBase = fileName.AfterLast(wxFILE_SEP_PATH).BeforeLast('.'); bool isLinked = false; diff --git a/src/Project.h b/src/Project.h index f44270ce3..629de1af5 100644 --- a/src/Project.h +++ b/src/Project.h @@ -176,7 +176,7 @@ class AUDACITY_DLL_API AudacityProject final : public wxFrame, TrackList *GetTracks() { return mTracks.get(); } const TrackList *GetTracks() const { return mTracks.get(); } - const int GetTrackCount(){ return GetTracks()->GetCount(); } + size_t GetTrackCount() const { return GetTracks()->size(); } UndoManager *GetUndoManager() { return mUndoManager.get(); } sampleFormat GetDefaultFormat() { return mDefaultFormat; } diff --git a/src/Track.cpp b/src/Track.cpp index 783178af6..811a0cb8d 100644 --- a/src/Track.cpp +++ b/src/Track.cpp @@ -1142,18 +1142,17 @@ bool TrackList::Contains(const Track * t) const return make_iterator_range( *this ).contains( t ); } -bool TrackList::IsEmpty() const +bool TrackList::empty() const { - return empty(); + return begin() == end(); } -int TrackList::GetCount() const +size_t TrackList::size() const { int cnt = 0; - if (!empty()) { + if (!empty()) cnt = back()->GetIndex() + 1; - } return cnt; } @@ -1303,7 +1302,7 @@ namespace { double doubleMin(double a, double b) { return std::min(a, b); } double doubleMax(double a, double b) { return std::max(a, b); } inline double Accumulate - (const ListOfTracks &list, + (const TrackList &list, double (Track::*memfn)() const, double (*combine)(double, double)) { @@ -1316,8 +1315,8 @@ namespace { auto iter = list.begin(); double acc = (**iter++.*memfn)(); return std::accumulate(iter, list.end(), acc, - [=](double acc, const ListOfTracks::value_type &pTrack) { - return combine(acc, (*pTrack.*memfn)()); + [=](double acc, const Track *pTrack) { + return combine(acc, (*pTrack.*memfn)()); }); } } diff --git a/src/Track.h b/src/Track.h index dcc37aafd..e2e2bb4af 100644 --- a/src/Track.h +++ b/src/Track.h @@ -365,6 +365,8 @@ class AUDACITY_DLL_API TrackListIterator /* not final */ Track *operator * () const; TrackListIterator &operator++ () { (void) Next(); return *this; } + TrackListIterator operator++ (int) + { auto copy = *this; operator++(); return copy; } bool operator == (const TrackListIterator &other) const; bool operator != (const TrackListIterator &other) const @@ -415,6 +417,8 @@ public: const Track *operator * () const { return *mIter; } TrackListConstIterator &operator++ () { (void) Next(); return *this; } + TrackListConstIterator operator++ (int) + { auto copy = *this; operator++(); return copy; } bool operator == (const TrackListConstIterator &other) const { return mIter == other.mIter; } @@ -666,8 +670,8 @@ class TrackList final : public wxEvtHandler, public ListOfTracks return {}; } - bool IsEmpty() const; - int GetCount() const; + bool empty() const; + size_t size() const; double GetStartTime() const; double GetEndTime() const; diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 1603848ad..4825e6adc 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -1088,7 +1088,7 @@ bool TrackPanel::IsMouseCaptured() void TrackPanel::UpdateViewIfNoTracks() { - if (mTracks->IsEmpty()) + if (mTracks->empty()) { // BG: There are no more tracks on screen //BG: Set zoom to normal diff --git a/src/commands/SelectCommand.cpp b/src/commands/SelectCommand.cpp index 4d429f124..deedc31a4 100644 --- a/src/commands/SelectCommand.cpp +++ b/src/commands/SelectCommand.cpp @@ -108,7 +108,7 @@ bool SelectCommand::Apply(CommandExecutionContext context) Error(wxT("Trying to select a negatively numbered track!")); return false; } - if (lastTrack >= tracks->GetCount()) + if (lastTrack >= (long)tracks->size()) { Error(wxT("Trying to select higher number track than exists!")); return false; diff --git a/src/tracks/ui/CommonTrackPanelCell.cpp b/src/tracks/ui/CommonTrackPanelCell.cpp index 5ccce5214..59f1fb119 100644 --- a/src/tracks/ui/CommonTrackPanelCell.cpp +++ b/src/tracks/ui/CommonTrackPanelCell.cpp @@ -29,7 +29,7 @@ unsigned CommonTrackPanelCell::HandleWheelRotation { using namespace RefreshCode; - if (pProject->GetTracks()->IsEmpty()) + if (pProject->GetTracks()->empty()) // Scrolling and Zoom in and out commands are disabled when there are no tracks. // This should be disabled too for consistency. Otherwise // you do see changes in the time ruler.