From c3ccbfd407b5d5fd7c93e85ae230a23cece4ad1c Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 31 May 2019 13:56:09 +0200 Subject: [PATCH] queue/Playlist: add `noexcept` --- src/queue/Playlist.cxx | 27 +++++++------- src/queue/Playlist.hxx | 70 ++++++++++++++++++++--------------- src/queue/PlaylistControl.cxx | 4 +- src/queue/PlaylistEdit.cxx | 17 +++++---- 4 files changed, 65 insertions(+), 53 deletions(-) diff --git a/src/queue/Playlist.cxx b/src/queue/Playlist.cxx index 401526d06..78e0fac58 100644 --- a/src/queue/Playlist.cxx +++ b/src/queue/Playlist.cxx @@ -28,7 +28,7 @@ #include void -playlist::TagModified(DetachedSong &&song) +playlist::TagModified(DetachedSong &&song) noexcept { if (!playing) return; @@ -62,7 +62,7 @@ playlist::TagModified(const char *uri, const Tag &tag) noexcept } inline void -playlist::QueueSongOrder(PlayerControl &pc, unsigned order) +playlist::QueueSongOrder(PlayerControl &pc, unsigned order) noexcept { assert(queue.IsValidOrder(order)); @@ -78,7 +78,7 @@ playlist::QueueSongOrder(PlayerControl &pc, unsigned order) } void -playlist::SongStarted() +playlist::SongStarted() noexcept { assert(current >= 0); @@ -88,7 +88,7 @@ playlist::SongStarted() } inline void -playlist::QueuedSongStarted(PlayerControl &pc) +playlist::QueuedSongStarted(PlayerControl &pc) noexcept { assert(!pc.LockGetSyncInfo().has_next_song); assert(queued >= -1); @@ -118,7 +118,8 @@ playlist::GetQueuedSong() const noexcept } void -playlist::UpdateQueuedSong(PlayerControl &pc, const DetachedSong *prev) +playlist::UpdateQueuedSong(PlayerControl &pc, + const DetachedSong *prev) noexcept { if (!playing) return; @@ -187,7 +188,7 @@ playlist::PlayOrder(PlayerControl &pc, unsigned order) } void -playlist::SyncWithPlayer(PlayerControl &pc) +playlist::SyncWithPlayer(PlayerControl &pc) noexcept { if (!playing) /* this event has reached us out of sync: we aren't @@ -216,7 +217,7 @@ playlist::SyncWithPlayer(PlayerControl &pc) } inline void -playlist::ResumePlayback(PlayerControl &pc) +playlist::ResumePlayback(PlayerControl &pc) noexcept { assert(playing); assert(pc.GetState() == PlayerState::STOP); @@ -243,7 +244,7 @@ playlist::ResumePlayback(PlayerControl &pc) } void -playlist::SetRepeat(PlayerControl &pc, bool status) +playlist::SetRepeat(PlayerControl &pc, bool status) noexcept { if (status == queue.repeat) return; @@ -260,7 +261,7 @@ playlist::SetRepeat(PlayerControl &pc, bool status) } static void -playlist_order(playlist &playlist) +playlist_order(playlist &playlist) noexcept { if (playlist.current >= 0) /* update playlist.current, order==position now */ @@ -270,7 +271,7 @@ playlist_order(playlist &playlist) } void -playlist::SetSingle(PlayerControl &pc, SingleMode status) +playlist::SetSingle(PlayerControl &pc, SingleMode status) noexcept { if (status == queue.single) return; @@ -288,7 +289,7 @@ playlist::SetSingle(PlayerControl &pc, SingleMode status) } void -playlist::SetConsume(bool status) +playlist::SetConsume(bool status) noexcept { if (status == queue.consume) return; @@ -298,7 +299,7 @@ playlist::SetConsume(bool status) } void -playlist::SetRandom(PlayerControl &pc, bool status) +playlist::SetRandom(PlayerControl &pc, bool status) noexcept { if (status == queue.random) return; @@ -358,7 +359,7 @@ playlist::GetNextPosition() const noexcept } void -playlist::BorderPause(PlayerControl &pc) +playlist::BorderPause(PlayerControl &pc) noexcept { if (queue.single == SingleMode::ONE_SHOT) { queue.single = SingleMode::OFF; diff --git a/src/queue/Playlist.hxx b/src/queue/Playlist.hxx index 73a78a40d..e2dfdd089 100644 --- a/src/queue/Playlist.hxx +++ b/src/queue/Playlist.hxx @@ -92,21 +92,21 @@ struct playlist { int queued = -1; playlist(unsigned max_length, - QueueListener &_listener) + QueueListener &_listener) noexcept :queue(max_length), listener(_listener) { } - uint32_t GetVersion() const { + uint32_t GetVersion() const noexcept { return queue.version; } - unsigned GetLength() const { + unsigned GetLength() const noexcept { return queue.GetLength(); } - unsigned PositionToId(unsigned position) const { + unsigned PositionToId(unsigned position) const noexcept { return queue.PositionToId(position); } @@ -128,13 +128,13 @@ struct playlist { * player thread whenever it requests a new queued song, or * when it exits. */ - void SyncWithPlayer(PlayerControl &pc); + void SyncWithPlayer(PlayerControl &pc) noexcept; /** * This is the "BORDER_PAUSE" event handler. It is invoked by * the player thread whenever playback goes into border pause. */ - void BorderPause(PlayerControl &pc); + void BorderPause(PlayerControl &pc) noexcept; protected: /** @@ -142,7 +142,7 @@ protected: * Updates the queue version and invokes * QueueListener::OnQueueModified(). */ - void OnModified(); + void OnModified() noexcept; /** * Called when playback of a new song starts. Unlike @@ -153,7 +153,7 @@ protected: * The song being started is specified by the #current * attribute. */ - void SongStarted(); + void SongStarted() noexcept; /** * Updates the "queued song". Calculates the next song @@ -164,38 +164,38 @@ protected: * @param prev the song which was previously queued, as * determined by playlist_get_queued_song() */ - void UpdateQueuedSong(PlayerControl &pc, const DetachedSong *prev); + void UpdateQueuedSong(PlayerControl &pc, const DetachedSong *prev) noexcept; /** * Queue a song, addressed by its order number. */ - void QueueSongOrder(PlayerControl &pc, unsigned order); + void QueueSongOrder(PlayerControl &pc, unsigned order) noexcept; /** * Called when the player thread has started playing the * "queued" song, i.e. it has switched from one song to the * next automatically. */ - void QueuedSongStarted(PlayerControl &pc); + void QueuedSongStarted(PlayerControl &pc) noexcept; /** * The player has stopped for some reason. Check the error, * and decide whether to re-start playback. */ - void ResumePlayback(PlayerControl &pc); + void ResumePlayback(PlayerControl &pc) noexcept; public: - void BeginBulk(); - void CommitBulk(PlayerControl &pc); + void BeginBulk() noexcept; + void CommitBulk(PlayerControl &pc) noexcept; - void Clear(PlayerControl &pc); + void Clear(PlayerControl &pc) noexcept; /** * A tag in the play queue has been modified by the player * thread. Apply the given song's tag to the current song if * the song matches. */ - void TagModified(DetachedSong &&song); + void TagModified(DetachedSong &&song) noexcept; void TagModified(const char *uri, const Tag &tag) noexcept; #ifdef ENABLE_DATABASE @@ -223,7 +223,7 @@ public: protected: void DeleteInternal(PlayerControl &pc, - unsigned song, const DetachedSong **queued_p); + unsigned song, const DetachedSong **queued_p) noexcept; public: void DeletePosition(PlayerControl &pc, unsigned position); @@ -248,9 +248,9 @@ public: * database. The method attempts to remove all instances of * this song from the queue. */ - void StaleSong(PlayerControl &pc, const char *uri); + void StaleSong(PlayerControl &pc, const char *uri) noexcept; - void Shuffle(PlayerControl &pc, unsigned start, unsigned end); + void Shuffle(PlayerControl &pc, unsigned start, unsigned end) noexcept; void MoveRange(PlayerControl &pc, unsigned start, unsigned end, int to); @@ -271,14 +271,24 @@ public: /** * Sets the start_time and end_time attributes on the song * with the specified id. + * + * Throws on error. */ void SetSongIdRange(PlayerControl &pc, unsigned id, SongTime start, SongTime end); - void AddSongIdTag(unsigned id, TagType tag_type, const char *value); + /** + * Throws on error. + */ + void AddSongIdTag(unsigned id, TagType tag_type, + const char *value); + + /** + * Throws on error. + */ void ClearSongIdTag(unsigned id, TagType tag_type); - void Stop(PlayerControl &pc); + void Stop(PlayerControl &pc) noexcept; /** * Throws on error. @@ -338,29 +348,29 @@ public: void SeekCurrent(PlayerControl &pc, SignedSongTime seek_time, bool relative); - bool GetRepeat() const { + bool GetRepeat() const noexcept { return queue.repeat; } - void SetRepeat(PlayerControl &pc, bool new_value); + void SetRepeat(PlayerControl &pc, bool new_value) noexcept; - bool GetRandom() const { + bool GetRandom() const noexcept { return queue.random; } - void SetRandom(PlayerControl &pc, bool new_value); + void SetRandom(PlayerControl &pc, bool new_value) noexcept; - SingleMode GetSingle() const { + SingleMode GetSingle() const noexcept { return queue.single; } - void SetSingle(PlayerControl &pc, SingleMode new_value); + void SetSingle(PlayerControl &pc, SingleMode new_value) noexcept; - bool GetConsume() const { + bool GetConsume() const noexcept { return queue.consume; } - void SetConsume(bool new_value); + void SetConsume(bool new_value) noexcept; private: /** @@ -372,7 +382,7 @@ private: * * @return the new order number of the given song */ - unsigned MoveOrderToCurrent(unsigned old_order); + unsigned MoveOrderToCurrent(unsigned old_order) noexcept; }; #endif diff --git a/src/queue/PlaylistControl.cxx b/src/queue/PlaylistControl.cxx index b9bbd3304..2d98a115f 100644 --- a/src/queue/PlaylistControl.cxx +++ b/src/queue/PlaylistControl.cxx @@ -29,7 +29,7 @@ #include "Log.hxx" void -playlist::Stop(PlayerControl &pc) +playlist::Stop(PlayerControl &pc) noexcept { if (!playing) return; @@ -56,7 +56,7 @@ playlist::Stop(PlayerControl &pc) } unsigned -playlist::MoveOrderToCurrent(unsigned old_order) +playlist::MoveOrderToCurrent(unsigned old_order) noexcept { if (!queue.random) /* no-op because there is no order list */ diff --git a/src/queue/PlaylistEdit.cxx b/src/queue/PlaylistEdit.cxx index a0e504f44..433147f31 100644 --- a/src/queue/PlaylistEdit.cxx +++ b/src/queue/PlaylistEdit.cxx @@ -35,7 +35,7 @@ #include void -playlist::OnModified() +playlist::OnModified() noexcept { if (bulk_edit) { /* postponed to CommitBulk() */ @@ -49,7 +49,7 @@ playlist::OnModified() } void -playlist::Clear(PlayerControl &pc) +playlist::Clear(PlayerControl &pc) noexcept { Stop(pc); @@ -60,7 +60,7 @@ playlist::Clear(PlayerControl &pc) } void -playlist::BeginBulk() +playlist::BeginBulk() noexcept { assert(!bulk_edit); @@ -69,7 +69,7 @@ playlist::BeginBulk() } void -playlist::CommitBulk(PlayerControl &pc) +playlist::CommitBulk(PlayerControl &pc) noexcept { assert(bulk_edit); @@ -213,7 +213,7 @@ playlist::SetPriorityId(PlayerControl &pc, void playlist::DeleteInternal(PlayerControl &pc, - unsigned song, const DetachedSong **queued_p) + unsigned song, const DetachedSong **queued_p) noexcept { assert(song < GetLength()); @@ -306,7 +306,7 @@ playlist::DeleteId(PlayerControl &pc, unsigned id) } void -playlist::StaleSong(PlayerControl &pc, const char *uri) +playlist::StaleSong(PlayerControl &pc, const char *uri) noexcept { /* don't remove the song if it's currently being played, to avoid disrupting playback; a deleted file may still be @@ -322,7 +322,8 @@ playlist::StaleSong(PlayerControl &pc, const char *uri) } void -playlist::MoveRange(PlayerControl &pc, unsigned start, unsigned end, int to) +playlist::MoveRange(PlayerControl &pc, + unsigned start, unsigned end, int to) { if (!queue.IsValidPosition(start) || !queue.IsValidPosition(end - 1)) throw PlaylistError::BadRange(); @@ -383,7 +384,7 @@ playlist::MoveId(PlayerControl &pc, unsigned id1, int to) } void -playlist::Shuffle(PlayerControl &pc, unsigned start, unsigned end) +playlist::Shuffle(PlayerControl &pc, unsigned start, unsigned end) noexcept { if (end > GetLength()) /* correct the "end" offset */