From a057b4f6d88f7bfc1d9846e14de5617a4c281c0d Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 3 Jun 2017 21:33:44 +0200 Subject: [PATCH] *: add lost of "noexcept" specifications --- src/AudioFormat.hxx | 2 +- src/DetachedSong.hxx | 6 +-- src/MixRampInfo.hxx | 16 ++++---- src/MusicBuffer.hxx | 2 +- src/MusicPipe.cxx | 6 +-- src/MusicPipe.hxx | 14 +++---- src/client/Client.hxx | 2 +- src/config/Block.hxx | 4 +- src/db/Helpers.cxx | 2 +- src/db/Interface.hxx | 2 +- src/db/LightDirectory.hxx | 6 +-- src/db/PlaylistInfo.hxx | 2 +- src/db/plugins/ProxyDatabasePlugin.cxx | 2 +- src/db/plugins/simple/Directory.hxx | 2 +- .../plugins/simple/SimpleDatabasePlugin.hxx | 4 +- src/db/plugins/upnp/Object.hxx | 6 +-- src/db/plugins/upnp/UpnpDatabasePlugin.cxx | 2 +- src/db/update/ExcludeList.cxx | 4 +- src/db/update/ExcludeList.hxx | 6 +-- src/decoder/Bridge.cxx | 6 +-- src/decoder/Bridge.hxx | 6 +-- src/decoder/Client.hxx | 6 +-- src/decoder/DecoderBuffer.hxx | 10 ++--- src/decoder/DecoderControl.hxx | 10 ++--- src/decoder/plugins/FlacMetadata.hxx | 20 +++++----- src/decoder/plugins/OpusDecoderPlugin.cxx | 4 +- src/event/Loop.hxx | 6 +-- src/fs/AllocatedPath.hxx | 39 ++++++++++--------- src/fs/Glob.hxx | 2 +- src/fs/Path.hxx | 6 +-- src/fs/Traits.hxx | 24 ++++++------ src/fs/io/BufferedReader.cxx | 2 +- src/fs/io/BufferedReader.hxx | 10 ++--- src/input/AsyncInputStream.cxx | 14 +++---- src/input/AsyncInputStream.hxx | 30 +++++++------- src/input/InputStream.hxx | 18 ++++----- src/lib/curl/Global.cxx | 6 +-- src/lib/nfs/Connection.hxx | 6 +-- src/lib/upnp/ContentDirectoryService.hxx | 4 +- .../plugins/SmbclientNeighborPlugin.cxx | 4 +- src/neighbor/plugins/UpnpNeighborPlugin.cxx | 4 +- src/net/AllocatedSocketAddress.hxx | 24 ++++++------ src/net/StaticSocketAddress.hxx | 22 +++++------ src/output/MultipleOutputs.hxx | 4 +- src/output/plugins/AlsaOutputPlugin.cxx | 2 +- src/output/plugins/OpenALOutputPlugin.cxx | 6 +-- src/output/plugins/RecorderOutputPlugin.cxx | 2 +- src/output/plugins/httpd/HttpdInternal.hxx | 4 +- src/player/Thread.cxx | 4 +- src/queue/Queue.hxx | 6 +-- src/storage/CompositeStorage.cxx | 4 +- src/storage/CompositeStorage.hxx | 6 +-- src/storage/plugins/CurlStorage.cxx | 2 +- src/tag/MixRamp.cxx | 4 +- src/tag/ReplayGain.cxx | 4 +- src/tag/Set.cxx | 6 +-- src/tag/Set.hxx | 8 ++-- src/tag/TagBuilder.hxx | 2 +- src/thread/Id.hxx | 6 +-- src/thread/Thread.hxx | 2 +- src/util/ConstBuffer.hxx | 2 +- src/util/StringView.cxx | 4 +- src/util/StringView.hxx | 24 ++++++------ test/FakeDecoderAPI.cxx | 6 +-- test/FakeDecoderAPI.hxx | 6 +-- 65 files changed, 246 insertions(+), 241 deletions(-) diff --git a/src/AudioFormat.hxx b/src/AudioFormat.hxx index 04c682b54..77e710f55 100644 --- a/src/AudioFormat.hxx +++ b/src/AudioFormat.hxx @@ -127,7 +127,7 @@ struct AudioFormat { void ApplyMask(AudioFormat mask) noexcept; gcc_pure - AudioFormat WithMask(AudioFormat mask) const { + AudioFormat WithMask(AudioFormat mask) const noexcept { AudioFormat result = *this; result.ApplyMask(mask); return result; diff --git a/src/DetachedSong.hxx b/src/DetachedSong.hxx index 9d1f1edd9..49558d9e5 100644 --- a/src/DetachedSong.hxx +++ b/src/DetachedSong.hxx @@ -152,7 +152,7 @@ public: bool IsRemote() const noexcept; gcc_pure - bool IsFile() const { + bool IsFile() const noexcept { return !IsRemote(); } @@ -162,11 +162,11 @@ public: gcc_pure bool IsInDatabase() const noexcept; - const Tag &GetTag() const { + const Tag &GetTag() const noexcept { return tag; } - Tag &WritableTag() { + Tag &WritableTag() noexcept { return tag; } diff --git a/src/MixRampInfo.hxx b/src/MixRampInfo.hxx index 2dbd9075a..c5caf241f 100644 --- a/src/MixRampInfo.hxx +++ b/src/MixRampInfo.hxx @@ -31,45 +31,45 @@ class MixRampInfo { public: MixRampInfo() = default; - void Clear() { + void Clear() noexcept { start.clear(); end.clear(); } gcc_pure - bool IsDefined() const { + bool IsDefined() const noexcept { return !start.empty() || !end.empty(); } gcc_pure - const char *GetStart() const { + const char *GetStart() const noexcept { return start.empty() ? nullptr : start.c_str(); } gcc_pure - const char *GetEnd() const { + const char *GetEnd() const noexcept { return end.empty() ? nullptr : end.c_str(); } - void SetStart(const char *new_value) { + void SetStart(const char *new_value) noexcept { if (new_value == nullptr) start.clear(); else start = new_value; } - void SetStart(std::string &&new_value) { + void SetStart(std::string &&new_value) noexcept { start = std::move(new_value); } - void SetEnd(const char *new_value) { + void SetEnd(const char *new_value) noexcept { if (new_value == nullptr) end.clear(); else end = new_value; } - void SetEnd(std::string &&new_value) { + void SetEnd(std::string &&new_value) noexcept { end = std::move(new_value); } }; diff --git a/src/MusicBuffer.hxx b/src/MusicBuffer.hxx index 1c51839e2..438ade621 100644 --- a/src/MusicBuffer.hxx +++ b/src/MusicBuffer.hxx @@ -60,7 +60,7 @@ public: * music_buffer_new(). */ gcc_pure - unsigned GetSize() const { + unsigned GetSize() const noexcept { return buffer.GetCapacity(); } diff --git a/src/MusicPipe.cxx b/src/MusicPipe.cxx index c82faa648..9dd2a7a8f 100644 --- a/src/MusicPipe.cxx +++ b/src/MusicPipe.cxx @@ -39,7 +39,7 @@ MusicPipe::Contains(const MusicChunk *chunk) const noexcept #endif MusicChunk * -MusicPipe::Shift() +MusicPipe::Shift() noexcept { const std::lock_guard protect(mutex); @@ -73,7 +73,7 @@ MusicPipe::Shift() } void -MusicPipe::Clear(MusicBuffer &buffer) +MusicPipe::Clear(MusicBuffer &buffer) noexcept { MusicChunk *chunk; @@ -82,7 +82,7 @@ MusicPipe::Clear(MusicBuffer &buffer) } void -MusicPipe::Push(MusicChunk *chunk) +MusicPipe::Push(MusicChunk *chunk) noexcept { assert(!chunk->IsEmpty()); assert(chunk->length == 0 || chunk->audio_format.IsValid()); diff --git a/src/MusicPipe.hxx b/src/MusicPipe.hxx index e9bebed6e..f9e42326b 100644 --- a/src/MusicPipe.hxx +++ b/src/MusicPipe.hxx @@ -77,7 +77,7 @@ public: * audio_format. */ gcc_pure - bool CheckFormat(AudioFormat other) const { + bool CheckFormat(AudioFormat other) const noexcept { return !audio_format.IsDefined() || audio_format == other; } @@ -94,37 +94,37 @@ public: * nullptr if the pipe is empty. */ gcc_pure - const MusicChunk *Peek() const { + const MusicChunk *Peek() const noexcept { return head; } /** * Removes the first chunk from the head, and returns it. */ - MusicChunk *Shift(); + MusicChunk *Shift() noexcept; /** * Clears the whole pipe and returns the chunks to the buffer. * * @param buffer the buffer object to return the chunks to */ - void Clear(MusicBuffer &buffer); + void Clear(MusicBuffer &buffer) noexcept; /** * Pushes a chunk to the tail of the pipe. */ - void Push(MusicChunk *chunk); + void Push(MusicChunk *chunk) noexcept; /** * Returns the number of chunks currently in this pipe. */ gcc_pure - unsigned GetSize() const { + unsigned GetSize() const noexcept { return size; } gcc_pure - bool IsEmpty() const { + bool IsEmpty() const noexcept { return GetSize() == 0; } }; diff --git a/src/client/Client.hxx b/src/client/Client.hxx index c3a9a9cc0..e2921417d 100644 --- a/src/client/Client.hxx +++ b/src/client/Client.hxx @@ -100,7 +100,7 @@ public: } gcc_pure - bool IsExpired() const { + bool IsExpired() const noexcept { return !FullyBufferedSocket::IsDefined(); } diff --git a/src/config/Block.hxx b/src/config/Block.hxx index edfa5a7d2..b8257db78 100644 --- a/src/config/Block.hxx +++ b/src/config/Block.hxx @@ -82,12 +82,12 @@ struct ConfigBlock { * object that was synthesized and not loaded from a * configuration file. */ - bool IsNull() const { + bool IsNull() const noexcept { return line < 0; } gcc_pure - bool IsEmpty() const { + bool IsEmpty() const noexcept { return block_params.empty(); } diff --git a/src/db/Helpers.cxx b/src/db/Helpers.cxx index bff14a3bb..805268632 100644 --- a/src/db/Helpers.cxx +++ b/src/db/Helpers.cxx @@ -29,7 +29,7 @@ struct StringLess { gcc_pure - bool operator()(const char *a, const char *b) const { + bool operator()(const char *a, const char *b) const noexcept { return strcmp(a, b) < 0; } }; diff --git a/src/db/Interface.hxx b/src/db/Interface.hxx index a81d985a6..a61c323d3 100644 --- a/src/db/Interface.hxx +++ b/src/db/Interface.hxx @@ -126,7 +126,7 @@ public: * Returns 0 if that is not not known/available. */ gcc_pure - virtual time_t GetUpdateStamp() const = 0; + virtual time_t GetUpdateStamp() const noexcept = 0; }; #endif diff --git a/src/db/LightDirectory.hxx b/src/db/LightDirectory.hxx index eca91c41f..be17329a6 100644 --- a/src/db/LightDirectory.hxx +++ b/src/db/LightDirectory.hxx @@ -44,16 +44,16 @@ struct LightDirectory { constexpr LightDirectory(const char *_uri, time_t _mtime) :uri(_uri), mtime(_mtime) {} - static constexpr LightDirectory Root() { + static constexpr LightDirectory Root() noexcept { return LightDirectory("", 0); } - bool IsRoot() const { + bool IsRoot() const noexcept { return *uri == 0; } gcc_pure - const char *GetPath() const { + const char *GetPath() const noexcept { return uri; } }; diff --git a/src/db/PlaylistInfo.hxx b/src/db/PlaylistInfo.hxx index bc43fd62e..eacedac58 100644 --- a/src/db/PlaylistInfo.hxx +++ b/src/db/PlaylistInfo.hxx @@ -45,7 +45,7 @@ struct PlaylistInfo { constexpr CompareName(const char *_name):name(_name) {} gcc_pure - bool operator()(const PlaylistInfo &pi) const { + bool operator()(const PlaylistInfo &pi) const noexcept { return pi.name.compare(name) == 0; } }; diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx index 0145c4b4f..13f174024 100644 --- a/src/db/plugins/ProxyDatabasePlugin.cxx +++ b/src/db/plugins/ProxyDatabasePlugin.cxx @@ -127,7 +127,7 @@ public: unsigned Update(const char *uri_utf8, bool discard) override; - time_t GetUpdateStamp() const override { + time_t GetUpdateStamp() const noexcept override { return update_stamp; } diff --git a/src/db/plugins/simple/Directory.hxx b/src/db/plugins/simple/Directory.hxx index cb8ebd530..99572a4b4 100644 --- a/src/db/plugins/simple/Directory.hxx +++ b/src/db/plugins/simple/Directory.hxx @@ -187,7 +187,7 @@ public: } gcc_pure - const char *GetPath() const { + const char *GetPath() const noexcept { return path.c_str(); } diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.hxx b/src/db/plugins/simple/SimpleDatabasePlugin.hxx index 474c2ea21..4336fb58b 100644 --- a/src/db/plugins/simple/SimpleDatabasePlugin.hxx +++ b/src/db/plugins/simple/SimpleDatabasePlugin.hxx @@ -76,7 +76,7 @@ public: const ConfigBlock &block); gcc_pure - Directory &GetRoot() { + Directory &GetRoot() noexcept { assert(root != NULL); return *root; @@ -125,7 +125,7 @@ public: DatabaseStats GetStats(const DatabaseSelection &selection) const override; - time_t GetUpdateStamp() const override { + time_t GetUpdateStamp() const noexcept override { return mtime; } diff --git a/src/db/plugins/upnp/Object.hxx b/src/db/plugins/upnp/Object.hxx index 9f7a42ad3..8a2a4e579 100644 --- a/src/db/plugins/upnp/Object.hxx +++ b/src/db/plugins/upnp/Object.hxx @@ -60,7 +60,7 @@ public: * Parent's ObjectId */ std::string parent_id; - + std::string url; /** @@ -80,7 +80,7 @@ public: UPnPDirObject &operator=(UPnPDirObject &&) = default; - void Clear() { + void Clear() noexcept { id.clear(); parent_id.clear(); url.clear(); @@ -90,7 +90,7 @@ public: } gcc_pure - bool Check() const { + bool Check() const noexcept { return !id.empty() && !parent_id.empty() && !name.empty() && (type != UPnPDirObject::Type::ITEM || item_class != UPnPDirObject::ItemClass::UNKNOWN); diff --git a/src/db/plugins/upnp/UpnpDatabasePlugin.cxx b/src/db/plugins/upnp/UpnpDatabasePlugin.cxx index 4dbfe30c6..c49d8a725 100644 --- a/src/db/plugins/upnp/UpnpDatabasePlugin.cxx +++ b/src/db/plugins/upnp/UpnpDatabasePlugin.cxx @@ -93,7 +93,7 @@ public: DatabaseStats GetStats(const DatabaseSelection &selection) const override; - time_t GetUpdateStamp() const override { + time_t GetUpdateStamp() const noexcept override { return 0; } diff --git a/src/db/update/ExcludeList.cxx b/src/db/update/ExcludeList.cxx index c62e8ee3e..e54999f8c 100644 --- a/src/db/update/ExcludeList.cxx +++ b/src/db/update/ExcludeList.cxx @@ -36,7 +36,7 @@ #include bool -ExcludeList::LoadFile(Path path_fs) +ExcludeList::LoadFile(Path path_fs) noexcept try { #ifdef HAVE_CLASS_GLOB TextFile file(path_fs); @@ -67,7 +67,7 @@ try { } bool -ExcludeList::Check(Path name_fs) const +ExcludeList::Check(Path name_fs) const noexcept { assert(!name_fs.IsNull()); diff --git a/src/db/update/ExcludeList.hxx b/src/db/update/ExcludeList.hxx index c0b287169..793a3a162 100644 --- a/src/db/update/ExcludeList.hxx +++ b/src/db/update/ExcludeList.hxx @@ -50,7 +50,7 @@ public: :parent(&_parent) {} gcc_pure - bool IsEmpty() const { + bool IsEmpty() const noexcept { #ifdef HAVE_CLASS_GLOB return ((parent == nullptr) || parent->IsEmpty()) && patterns.empty(); #else @@ -62,13 +62,13 @@ public: /** * Loads and parses a .mpdignore file. */ - bool LoadFile(Path path_fs); + bool LoadFile(Path path_fs) noexcept; /** * Checks whether one of the patterns in the .mpdignore file matches * the specified file name. */ - bool Check(Path name_fs) const; + bool Check(Path name_fs) const noexcept; }; diff --git a/src/decoder/Bridge.cxx b/src/decoder/Bridge.cxx index c24c80768..37fcb2bf9 100644 --- a/src/decoder/Bridge.cxx +++ b/src/decoder/Bridge.cxx @@ -277,7 +277,7 @@ DecoderBridge::Ready(const AudioFormat audio_format, } DecoderCommand -DecoderBridge::GetCommand() +DecoderBridge::GetCommand() noexcept { return LockGetVirtualCommand(); } @@ -326,7 +326,7 @@ DecoderBridge::CommandFinished() } SongTime -DecoderBridge::GetSeekTime() +DecoderBridge::GetSeekTime() noexcept { assert(dc.pipe != nullptr); @@ -341,7 +341,7 @@ DecoderBridge::GetSeekTime() } uint64_t -DecoderBridge::GetSeekFrame() +DecoderBridge::GetSeekFrame() noexcept { return GetSeekTime().ToScale(dc.in_audio_format.sample_rate); } diff --git a/src/decoder/Bridge.hxx b/src/decoder/Bridge.hxx index 8573d6a7f..3b354c063 100644 --- a/src/decoder/Bridge.hxx +++ b/src/decoder/Bridge.hxx @@ -134,10 +134,10 @@ public: /* virtual methods from DecoderClient */ void Ready(AudioFormat audio_format, bool seekable, SignedSongTime duration) override; - DecoderCommand GetCommand() override; + DecoderCommand GetCommand() noexcept override; void CommandFinished() override; - SongTime GetSeekTime() override; - uint64_t GetSeekFrame() override; + SongTime GetSeekTime() noexcept override; + uint64_t GetSeekFrame() noexcept override; void SeekError() override; InputStreamPtr OpenUri(const char *uri) override; size_t Read(InputStream &is, void *buffer, size_t length) override; diff --git a/src/decoder/Client.hxx b/src/decoder/Client.hxx index 8de82d155..87f19f5be 100644 --- a/src/decoder/Client.hxx +++ b/src/decoder/Client.hxx @@ -58,7 +58,7 @@ public: * command pending */ gcc_pure - virtual DecoderCommand GetCommand() = 0; + virtual DecoderCommand GetCommand() noexcept = 0; /** * Called by the decoder when it has performed the requested command @@ -73,7 +73,7 @@ public: * @return the destination position for the seek in milliseconds */ gcc_pure - virtual SongTime GetSeekTime() = 0; + virtual SongTime GetSeekTime() noexcept = 0; /** * Call this when you have received the DecoderCommand::SEEK command. @@ -81,7 +81,7 @@ public: * @return the destination position for the seek in frames */ gcc_pure - virtual uint64_t GetSeekFrame() = 0; + virtual uint64_t GetSeekFrame() noexcept = 0; /** * Call this instead of CommandFinished() when seeking has diff --git a/src/decoder/DecoderBuffer.hxx b/src/decoder/DecoderBuffer.hxx index c79f8d96c..a7ba2f85f 100644 --- a/src/decoder/DecoderBuffer.hxx +++ b/src/decoder/DecoderBuffer.hxx @@ -54,11 +54,11 @@ public: size_t _size) :client(_client), is(_is), buffer(_size) {} - const InputStream &GetStream() const { + const InputStream &GetStream() const noexcept { return is; } - void Clear() { + void Clear() noexcept { buffer.Clear(); } @@ -75,7 +75,7 @@ public: * How many bytes are stored in the buffer? */ gcc_pure - size_t GetAvailable() const { + size_t GetAvailable() const noexcept { return buffer.GetAvailable(); } @@ -84,7 +84,7 @@ public: * you have to call Consume() to do that. The returned buffer * becomes invalid after a Fill() or a Consume() call. */ - ConstBuffer Read() const { + ConstBuffer Read() const noexcept { auto r = buffer.Read(); return { r.data, r.size }; } @@ -102,7 +102,7 @@ public: * * @param nbytes the number of bytes to consume */ - void Consume(size_t nbytes) { + void Consume(size_t nbytes) noexcept { buffer.Consume(nbytes); } diff --git a/src/decoder/DecoderControl.hxx b/src/decoder/DecoderControl.hxx index fa8fdfd2b..cc858c9a5 100644 --- a/src/decoder/DecoderControl.hxx +++ b/src/decoder/DecoderControl.hxx @@ -227,29 +227,29 @@ struct DecoderControl { } gcc_pure - bool LockIsIdle() const { + bool LockIsIdle() const noexcept { const std::lock_guard protect(mutex); return IsIdle(); } - bool IsStarting() const { + bool IsStarting() const noexcept { return state == DecoderState::START; } gcc_pure - bool LockIsStarting() const { + bool LockIsStarting() const noexcept { const std::lock_guard protect(mutex); return IsStarting(); } - bool HasFailed() const { + bool HasFailed() const noexcept { assert(command == DecoderCommand::NONE); return state == DecoderState::ERROR; } gcc_pure - bool LockHasFailed() const { + bool LockHasFailed() const noexcept { const std::lock_guard protect(mutex); return HasFailed(); } diff --git a/src/decoder/plugins/FlacMetadata.hxx b/src/decoder/plugins/FlacMetadata.hxx index ede627aa1..d0ee8c824 100644 --- a/src/decoder/plugins/FlacMetadata.hxx +++ b/src/decoder/plugins/FlacMetadata.hxx @@ -42,25 +42,27 @@ public: return chain; } - bool Read(const char *path) { + bool Read(const char *path) noexcept { return ::FLAC__metadata_chain_read(chain, path); } - bool Read(FLAC__IOHandle handle, FLAC__IOCallbacks callbacks) { + bool Read(FLAC__IOHandle handle, + FLAC__IOCallbacks callbacks) noexcept { return ::FLAC__metadata_chain_read_with_callbacks(chain, handle, callbacks); } - bool Read(InputStream &is) { + bool Read(InputStream &is) noexcept { return Read(::ToFlacIOHandle(is), ::GetFlacIOCallbacks(is)); } - bool ReadOgg(const char *path) { + bool ReadOgg(const char *path) noexcept { return ::FLAC__metadata_chain_read_ogg(chain, path); } - bool ReadOgg(FLAC__IOHandle handle, FLAC__IOCallbacks callbacks) { + bool ReadOgg(FLAC__IOHandle handle, + FLAC__IOCallbacks callbacks) noexcept { return ::FLAC__metadata_chain_read_ogg_with_callbacks(chain, handle, callbacks); @@ -71,12 +73,12 @@ public: } gcc_pure - FLAC__Metadata_ChainStatus GetStatus() const { + FLAC__Metadata_ChainStatus GetStatus() const noexcept { return ::FLAC__metadata_chain_status(chain); } gcc_pure - const char *GetStatusString() const { + const char *GetStatusString() const noexcept { return FLAC__Metadata_ChainStatusString[GetStatus()]; } @@ -99,12 +101,12 @@ public: ::FLAC__metadata_iterator_delete(iterator); } - bool Next() { + bool Next() noexcept { return ::FLAC__metadata_iterator_next(iterator); } gcc_pure - FLAC__StreamMetadata *GetBlock() { + FLAC__StreamMetadata *GetBlock() noexcept { return ::FLAC__metadata_iterator_get_block(iterator); } }; diff --git a/src/decoder/plugins/OpusDecoderPlugin.cxx b/src/decoder/plugins/OpusDecoderPlugin.cxx index b526259ff..6c6d39845 100644 --- a/src/decoder/plugins/OpusDecoderPlugin.cxx +++ b/src/decoder/plugins/OpusDecoderPlugin.cxx @@ -52,14 +52,14 @@ static constexpr unsigned opus_output_buffer_frames = opus_sample_rate / 4; gcc_pure static bool -IsOpusHead(const ogg_packet &packet) +IsOpusHead(const ogg_packet &packet) noexcept { return packet.bytes >= 8 && memcmp(packet.packet, "OpusHead", 8) == 0; } gcc_pure static bool -IsOpusTags(const ogg_packet &packet) +IsOpusTags(const ogg_packet &packet) noexcept { return packet.bytes >= 8 && memcmp(packet.packet, "OpusTags", 8) == 0; } diff --git a/src/event/Loop.hxx b/src/event/Loop.hxx index f1962b4df..1060a8769 100644 --- a/src/event/Loop.hxx +++ b/src/event/Loop.hxx @@ -199,7 +199,7 @@ public: * Are we currently running inside this EventLoop's thread? */ gcc_pure - bool IsInside() const { + bool IsInside() const noexcept { assert(!thread.IsNull()); return thread.IsInside(); @@ -207,7 +207,7 @@ public: #ifndef NDEBUG gcc_pure - bool IsInsideOrVirgin() const { + bool IsInsideOrVirgin() const noexcept { return virgin || IsInside(); } #endif @@ -219,7 +219,7 @@ public: * are not yet/anymore handled. */ gcc_pure - bool IsInsideOrNull() const { + bool IsInsideOrNull() const noexcept { return thread.IsNull() || thread.IsInside(); } }; diff --git a/src/fs/AllocatedPath.hxx b/src/fs/AllocatedPath.hxx index 513453ffd..be26ffd78 100644 --- a/src/fs/AllocatedPath.hxx +++ b/src/fs/AllocatedPath.hxx @@ -77,12 +77,12 @@ public: * @see IsNull() */ gcc_const - static AllocatedPath Null() { + static AllocatedPath Null() noexcept { return AllocatedPath(nullptr); } gcc_pure - operator Path() const { + operator Path() const noexcept { return Path::FromFS(c_str()); } @@ -90,36 +90,39 @@ public: * Join two path components with the path separator. */ gcc_pure gcc_nonnull_all - static AllocatedPath Build(const_pointer_type a, const_pointer_type b) { + static AllocatedPath Build(const_pointer_type a, + const_pointer_type b) noexcept { return Build(a, PathTraitsFS::GetLength(a), b, PathTraitsFS::GetLength(b)); } gcc_pure gcc_nonnull_all - static AllocatedPath Build(Path a, const_pointer_type b) { + static AllocatedPath Build(Path a, const_pointer_type b) noexcept { return Build(a.c_str(), b); } gcc_pure gcc_nonnull_all - static AllocatedPath Build(Path a, Path b) { + static AllocatedPath Build(Path a, Path b) noexcept { return Build(a, b.c_str()); } gcc_pure gcc_nonnull_all - static AllocatedPath Build(const_pointer_type a, const AllocatedPath &b) { + static AllocatedPath Build(const_pointer_type a, + const AllocatedPath &b) noexcept { return Build(a, PathTraitsFS::GetLength(a), b.value.c_str(), b.value.size()); } gcc_pure gcc_nonnull_all - static AllocatedPath Build(const AllocatedPath &a, const_pointer_type b) { + static AllocatedPath Build(const AllocatedPath &a, + const_pointer_type b) noexcept { return Build(a.value.c_str(), a.value.size(), b, PathTraitsFS::GetLength(b)); } gcc_pure static AllocatedPath Build(const AllocatedPath &a, - const AllocatedPath &b) { + const AllocatedPath &b) noexcept { return Build(a.value.c_str(), a.value.size(), b.value.c_str(), b.value.size()); } @@ -129,13 +132,13 @@ public: * character set to a #Path instance. */ gcc_pure - static AllocatedPath FromFS(const_pointer_type fs) { + static AllocatedPath FromFS(const_pointer_type fs) noexcept { return AllocatedPath(fs); } gcc_pure static AllocatedPath FromFS(const_pointer_type _begin, - const_pointer_type _end) { + const_pointer_type _end) noexcept { return AllocatedPath(_begin, _end); } @@ -144,7 +147,7 @@ public: * character set to a #Path instance. */ gcc_pure - static AllocatedPath FromFS(string &&fs) { + static AllocatedPath FromFS(string &&fs) noexcept { return AllocatedPath(std::move(fs)); } @@ -176,12 +179,12 @@ public: } gcc_pure - bool operator==(const AllocatedPath &other) const { + bool operator==(const AllocatedPath &other) const noexcept { return value == other.value; } gcc_pure - bool operator!=(const AllocatedPath &other) const { + bool operator!=(const AllocatedPath &other) const noexcept { return value != other.value; } @@ -197,7 +200,7 @@ public: * Check if this is a "nulled" instance. A "nulled" instance * must not be used. */ - bool IsNull() const { + bool IsNull() const noexcept { return value.empty(); } @@ -206,7 +209,7 @@ public: * * @see IsNull() */ - void SetNull() { + void SetNull() noexcept { value.clear(); } @@ -215,7 +218,7 @@ public: * elements (which may not be the number of characters). */ gcc_pure - size_t length() const { + size_t length() const noexcept { return value.length(); } @@ -225,7 +228,7 @@ public: * instance ends. */ gcc_pure - const_pointer_type c_str() const { + const_pointer_type c_str() const noexcept { return value.c_str(); } @@ -234,7 +237,7 @@ public: * null-terminated. */ gcc_pure - const_pointer_type data() const { + const_pointer_type data() const noexcept { return value.data(); } diff --git a/src/fs/Glob.hxx b/src/fs/Glob.hxx index 714eaa753..1f8402089 100644 --- a/src/fs/Glob.hxx +++ b/src/fs/Glob.hxx @@ -54,7 +54,7 @@ public: #endif gcc_pure - bool Check(const char *name_fs) const { + bool Check(const char *name_fs) const noexcept { #ifdef HAVE_FNMATCH return fnmatch(pattern.c_str(), name_fs, 0) == 0; #elif defined(WIN32) diff --git a/src/fs/Path.hxx b/src/fs/Path.hxx index 5053162ef..8e3eefb09 100644 --- a/src/fs/Path.hxx +++ b/src/fs/Path.hxx @@ -92,7 +92,7 @@ public: * elements (which may not be the number of characters). */ gcc_pure - size_t length() const { + size_t length() const noexcept { assert(!IsNull()); return PathTraitsFS::GetLength(c_str()); @@ -104,7 +104,7 @@ public: * instance ends. */ gcc_pure - const_pointer_type c_str() const { + const_pointer_type c_str() const noexcept { return Base::c_str(); } @@ -113,7 +113,7 @@ public: * null-terminated. */ gcc_pure - const_pointer_type data() const { + const_pointer_type data() const noexcept { return c_str(); } diff --git a/src/fs/Traits.hxx b/src/fs/Traits.hxx index 699ab73e8..67f74dc57 100644 --- a/src/fs/Traits.hxx +++ b/src/fs/Traits.hxx @@ -63,7 +63,7 @@ struct PathTraitsFS { static constexpr const_pointer_type CURRENT_DIRECTORY = PATH_LITERAL("."); - static constexpr bool IsSeparator(value_type ch) { + static constexpr bool IsSeparator(value_type ch) noexcept { return #ifdef WIN32 ch == '/' || @@ -72,7 +72,7 @@ struct PathTraitsFS { } gcc_pure gcc_nonnull_all - static const_pointer_type FindLastSeparator(const_pointer_type p) { + static const_pointer_type FindLastSeparator(const_pointer_type p) noexcept { #if !CLANG_CHECK_VERSION(3,6) /* disabled on clang due to -Wtautological-pointer-compare */ assert(p != nullptr); @@ -90,13 +90,13 @@ struct PathTraitsFS { #ifdef WIN32 gcc_pure gcc_nonnull_all - static constexpr bool IsDrive(const_pointer_type p) { + static constexpr bool IsDrive(const_pointer_type p) noexcept { return IsAlphaASCII(p[0]) && p[1] == ':'; } #endif gcc_pure gcc_nonnull_all - static bool IsAbsolute(const_pointer_type p) { + static bool IsAbsolute(const_pointer_type p) noexcept { #if !CLANG_CHECK_VERSION(3,6) /* disabled on clang due to -Wtautological-pointer-compare */ assert(p != nullptr); @@ -110,12 +110,12 @@ struct PathTraitsFS { } gcc_pure gcc_nonnull_all - static size_t GetLength(const_pointer_type p) { + static size_t GetLength(const_pointer_type p) noexcept { return StringLength(p); } gcc_pure gcc_nonnull_all - static const_pointer_type Find(const_pointer_type p, value_type ch) { + static const_pointer_type Find(const_pointer_type p, value_type ch) noexcept { return StringFind(p, ch); } @@ -179,7 +179,7 @@ struct PathTraitsUTF8 { } gcc_pure gcc_nonnull_all - static const_pointer_type FindLastSeparator(const_pointer_type p) { + static const_pointer_type FindLastSeparator(const_pointer_type p) noexcept { #if !CLANG_CHECK_VERSION(3,6) /* disabled on clang due to -Wtautological-pointer-compare */ assert(p != nullptr); @@ -190,13 +190,13 @@ struct PathTraitsUTF8 { #ifdef WIN32 gcc_pure gcc_nonnull_all - static constexpr bool IsDrive(const_pointer_type p) { + static constexpr bool IsDrive(const_pointer_type p) noexcept { return IsAlphaASCII(p[0]) && p[1] == ':'; } #endif gcc_pure gcc_nonnull_all - static bool IsAbsolute(const_pointer_type p) { + static bool IsAbsolute(const_pointer_type p) noexcept { #if !CLANG_CHECK_VERSION(3,6) /* disabled on clang due to -Wtautological-pointer-compare */ assert(p != nullptr); @@ -210,12 +210,12 @@ struct PathTraitsUTF8 { } gcc_pure gcc_nonnull_all - static size_t GetLength(const_pointer_type p) { + static size_t GetLength(const_pointer_type p) noexcept { return StringLength(p); } gcc_pure gcc_nonnull_all - static const_pointer_type Find(const_pointer_type p, value_type ch) { + static const_pointer_type Find(const_pointer_type p, value_type ch) noexcept { return StringFind(p, ch); } @@ -255,7 +255,7 @@ struct PathTraitsUTF8 { const_pointer_type b, size_t b_size) noexcept; gcc_pure gcc_nonnull_all - static string Build(const_pointer_type a, const_pointer_type b) { + static string Build(const_pointer_type a, const_pointer_type b) noexcept { return Build(a, GetLength(a), b, GetLength(b)); } }; diff --git a/src/fs/io/BufferedReader.cxx b/src/fs/io/BufferedReader.cxx index 4999965a6..f3095ca93 100644 --- a/src/fs/io/BufferedReader.cxx +++ b/src/fs/io/BufferedReader.cxx @@ -67,7 +67,7 @@ BufferedReader::ReadFull(size_t size) } size_t -BufferedReader::ReadFromBuffer(WritableBuffer dest) +BufferedReader::ReadFromBuffer(WritableBuffer dest) noexcept { auto src = Read(); size_t nbytes = std::min(src.size, dest.size); diff --git a/src/fs/io/BufferedReader.hxx b/src/fs/io/BufferedReader.hxx index 0e1b4a5b7..c4c6da80f 100644 --- a/src/fs/io/BufferedReader.hxx +++ b/src/fs/io/BufferedReader.hxx @@ -47,7 +47,7 @@ public: * Reset the internal state. Should be called after rewinding * the underlying #Reader. */ - void Reset() { + void Reset() noexcept { buffer.Clear(); eof = false; line_number = 0; @@ -56,7 +56,7 @@ public: bool Fill(bool need_more); gcc_pure - WritableBuffer Read() const { + WritableBuffer Read() const noexcept { return buffer.Read().ToVoid(); } @@ -67,7 +67,7 @@ public: */ void *ReadFull(size_t size); - void Consume(size_t n) { + void Consume(size_t n) noexcept { buffer.Consume(n); } @@ -75,7 +75,7 @@ public: * Read (and consume) data from the input buffer into the * given buffer. Does not attempt to refill the buffer. */ - size_t ReadFromBuffer(WritableBuffer dest); + size_t ReadFromBuffer(WritableBuffer dest) noexcept; /** * Read data into the given buffer and consume it from our @@ -86,7 +86,7 @@ public: char *ReadLine(); - unsigned GetLineNumber() const { + unsigned GetLineNumber() const noexcept { return line_number; } }; diff --git a/src/input/AsyncInputStream.cxx b/src/input/AsyncInputStream.cxx index 52621019c..f6e510a1e 100644 --- a/src/input/AsyncInputStream.cxx +++ b/src/input/AsyncInputStream.cxx @@ -52,14 +52,14 @@ AsyncInputStream::~AsyncInputStream() } void -AsyncInputStream::SetTag(Tag *_tag) +AsyncInputStream::SetTag(Tag *_tag) noexcept { delete tag; tag = _tag; } void -AsyncInputStream::Pause() +AsyncInputStream::Pause() noexcept { assert(io_thread_inside()); @@ -141,7 +141,7 @@ AsyncInputStream::Seek(offset_type new_offset) } void -AsyncInputStream::SeekDone() +AsyncInputStream::SeekDone() noexcept { assert(io_thread_inside()); assert(IsSeekPending()); @@ -201,7 +201,7 @@ AsyncInputStream::Read(void *ptr, size_t read_size) } void -AsyncInputStream::CommitWriteBuffer(size_t nbytes) +AsyncInputStream::CommitWriteBuffer(size_t nbytes) noexcept { buffer.Append(nbytes); @@ -212,7 +212,7 @@ AsyncInputStream::CommitWriteBuffer(size_t nbytes) } void -AsyncInputStream::AppendToBuffer(const void *data, size_t append_size) +AsyncInputStream::AppendToBuffer(const void *data, size_t append_size) noexcept { auto w = buffer.Write(); assert(!w.IsEmpty()); @@ -238,7 +238,7 @@ AsyncInputStream::AppendToBuffer(const void *data, size_t append_size) } void -AsyncInputStream::DeferredResume() +AsyncInputStream::DeferredResume() noexcept { const std::lock_guard protect(mutex); @@ -251,7 +251,7 @@ AsyncInputStream::DeferredResume() } void -AsyncInputStream::DeferredSeek() +AsyncInputStream::DeferredSeek() noexcept { const std::lock_guard protect(mutex); if (seek_state != SeekState::SCHEDULED) diff --git a/src/input/AsyncInputStream.hxx b/src/input/AsyncInputStream.hxx index 3a0b00580..18c4702e8 100644 --- a/src/input/AsyncInputStream.hxx +++ b/src/input/AsyncInputStream.hxx @@ -92,15 +92,15 @@ protected: /** * Pass an tag from the I/O thread to the client thread. */ - void SetTag(Tag *_tag); + void SetTag(Tag *_tag) noexcept; - void ClearTag() { + void ClearTag() noexcept { SetTag(nullptr); } - void Pause(); + void Pause() noexcept; - bool IsPaused() const { + bool IsPaused() const noexcept { return paused; } @@ -109,15 +109,15 @@ protected: * continue feeding Read() calls from the buffer until it runs * empty. */ - void SetClosed() { + void SetClosed() noexcept { open = false; } - bool IsBufferEmpty() const { + bool IsBufferEmpty() const noexcept { return buffer.IsEmpty(); } - bool IsBufferFull() const { + bool IsBufferFull() const noexcept { return buffer.IsFull(); } @@ -125,21 +125,21 @@ protected: * Determine how many bytes can be added to the buffer. */ gcc_pure - size_t GetBufferSpace() const { + size_t GetBufferSpace() const noexcept { return buffer.GetSpace(); } - CircularBuffer::Range PrepareWriteBuffer() { + CircularBuffer::Range PrepareWriteBuffer() noexcept { return buffer.Write(); } - void CommitWriteBuffer(size_t nbytes); + void CommitWriteBuffer(size_t nbytes) noexcept; /** * Append data to the buffer. The size must fit into the * buffer; see GetBufferSpace(). */ - void AppendToBuffer(const void *data, size_t append_size); + void AppendToBuffer(const void *data, size_t append_size) noexcept; /** * Implement code here that will resume the stream after it @@ -154,7 +154,7 @@ protected: */ virtual void DoSeek(offset_type new_offset) = 0; - bool IsSeekPending() const { + bool IsSeekPending() const noexcept { return seek_state == SeekState::PENDING; } @@ -162,14 +162,14 @@ protected: * Call this after seeking has finished. It will notify the * client thread. */ - void SeekDone(); + void SeekDone() noexcept; private: void Resume(); /* for DeferredCall */ - void DeferredResume(); - void DeferredSeek(); + void DeferredResume() noexcept; + void DeferredSeek() noexcept; }; #endif diff --git a/src/input/InputStream.hxx b/src/input/InputStream.hxx index 86f19f094..b5237ee4b 100644 --- a/src/input/InputStream.hxx +++ b/src/input/InputStream.hxx @@ -184,20 +184,20 @@ public: void LockWaitReady(); gcc_pure - bool HasMimeType() const { + bool HasMimeType() const noexcept { assert(ready); return !mime.empty(); } gcc_pure - const char *GetMimeType() const { + const char *GetMimeType() const noexcept { assert(ready); return mime.empty() ? nullptr : mime.c_str(); } - void ClearMimeType() { + void ClearMimeType() noexcept { mime.clear(); } @@ -215,35 +215,35 @@ public: } gcc_pure - bool KnownSize() const { + bool KnownSize() const noexcept { assert(ready); return size != UNKNOWN_SIZE; } gcc_pure - offset_type GetSize() const { + offset_type GetSize() const noexcept { assert(ready); assert(KnownSize()); return size; } - void AddOffset(offset_type delta) { + void AddOffset(offset_type delta) noexcept { assert(ready); offset += delta; } gcc_pure - offset_type GetOffset() const { + offset_type GetOffset() const noexcept { assert(ready); return offset; } gcc_pure - offset_type GetRest() const { + offset_type GetRest() const noexcept { assert(ready); assert(KnownSize()); @@ -251,7 +251,7 @@ public: } gcc_pure - bool IsSeekable() const { + bool IsSeekable() const noexcept { assert(ready); return seekable; diff --git a/src/lib/curl/Global.cxx b/src/lib/curl/Global.cxx index 12a8f638a..7c233743e 100644 --- a/src/lib/curl/Global.cxx +++ b/src/lib/curl/Global.cxx @@ -63,7 +63,7 @@ public: */ static int SocketFunction(CURL *easy, curl_socket_t s, int action, - void *userp, void *socketp); + void *userp, void *socketp) noexcept; virtual bool OnSocketReady(unsigned flags) override; @@ -75,7 +75,7 @@ private: } gcc_const - static unsigned CurlPollToFlags(int action) { + static unsigned CurlPollToFlags(int action) noexcept { switch (action) { case CURL_POLL_NONE: return 0; @@ -108,7 +108,7 @@ CurlGlobal::CurlGlobal(EventLoop &_loop) int CurlSocket::SocketFunction(gcc_unused CURL *easy, curl_socket_t s, int action, - void *userp, void *socketp) { + void *userp, void *socketp) noexcept { auto &global = *(CurlGlobal *)userp; CurlSocket *cs = (CurlSocket *)socketp; diff --git a/src/lib/nfs/Connection.hxx b/src/lib/nfs/Connection.hxx index a752535e0..2374c47ca 100644 --- a/src/lib/nfs/Connection.hxx +++ b/src/lib/nfs/Connection.hxx @@ -147,16 +147,16 @@ public: ~NfsConnection(); gcc_pure - const char *GetServer() const { + const char *GetServer() const noexcept { return server.c_str(); } gcc_pure - const char *GetExportName() const { + const char *GetExportName() const noexcept { return export_name.c_str(); } - EventLoop &GetEventLoop() { + EventLoop &GetEventLoop() noexcept { return SocketMonitor::GetEventLoop(); } diff --git a/src/lib/upnp/ContentDirectoryService.hxx b/src/lib/upnp/ContentDirectoryService.hxx index 198d104c5..78d7dffca 100644 --- a/src/lib/upnp/ContentDirectoryService.hxx +++ b/src/lib/upnp/ContentDirectoryService.hxx @@ -114,12 +114,12 @@ public: std::list getSearchCapabilities(UpnpClient_Handle handle) const; gcc_pure - std::string GetURI() const { + std::string GetURI() const noexcept { return "upnp://" + m_deviceId + "/" + m_serviceType; } /** Retrieve the "friendly name" for this server, useful for display. */ - const char *getFriendlyName() const { + const char *getFriendlyName() const noexcept { return m_friendlyName.c_str(); } }; diff --git a/src/neighbor/plugins/SmbclientNeighborPlugin.cxx b/src/neighbor/plugins/SmbclientNeighborPlugin.cxx index 3b5bcba50..0b831a3c0 100644 --- a/src/neighbor/plugins/SmbclientNeighborPlugin.cxx +++ b/src/neighbor/plugins/SmbclientNeighborPlugin.cxx @@ -48,12 +48,12 @@ class SmbclientNeighborExplorer final : public NeighborExplorer { Server(const Server &) = delete; gcc_pure - bool operator==(const Server &other) const { + bool operator==(const Server &other) const noexcept { return name == other.name; } gcc_pure - NeighborInfo Export() const { + NeighborInfo Export() const noexcept { return { "smb://" + name + "/", comment }; } }; diff --git a/src/neighbor/plugins/UpnpNeighborPlugin.cxx b/src/neighbor/plugins/UpnpNeighborPlugin.cxx index a0ce36817..34e14514f 100644 --- a/src/neighbor/plugins/UpnpNeighborPlugin.cxx +++ b/src/neighbor/plugins/UpnpNeighborPlugin.cxx @@ -43,12 +43,12 @@ class UpnpNeighborExplorer final Server(const Server &) = delete; gcc_pure - bool operator==(const Server &other) const { + bool operator==(const Server &other) const noexcept { return name == other.name; } gcc_pure - NeighborInfo Export() const { + NeighborInfo Export() const noexcept { return { "smb://" + name + "/", comment }; } }; diff --git a/src/net/AllocatedSocketAddress.hxx b/src/net/AllocatedSocketAddress.hxx index 15aafd7d1..6491fb9c0 100644 --- a/src/net/AllocatedSocketAddress.hxx +++ b/src/net/AllocatedSocketAddress.hxx @@ -76,47 +76,47 @@ public: AllocatedSocketAddress &operator=(const AllocatedSocketAddress &) = delete; - AllocatedSocketAddress &operator=(AllocatedSocketAddress &&src) { + AllocatedSocketAddress &operator=(AllocatedSocketAddress &&src) noexcept { std::swap(address, src.address); std::swap(size, src.size); return *this; } gcc_pure - bool operator==(SocketAddress other) const { + bool operator==(SocketAddress other) const noexcept { return (SocketAddress)*this == other; } - bool operator!=(SocketAddress &other) const { + bool operator!=(SocketAddress &other) const noexcept { return !(*this == other); } gcc_const - static AllocatedSocketAddress Null() { + static AllocatedSocketAddress Null() noexcept { return AllocatedSocketAddress(nullptr, 0); } - bool IsNull() const { + bool IsNull() const noexcept { return address == nullptr; } - size_type GetSize() const { + size_type GetSize() const noexcept { return size; } - const struct sockaddr *GetAddress() const { + const struct sockaddr *GetAddress() const noexcept { return address; } - operator SocketAddress() const { + operator SocketAddress() const noexcept { return SocketAddress(address, size); } - operator const struct sockaddr *() const { + operator const struct sockaddr *() const noexcept { return address; } - int GetFamily() const { + int GetFamily() const noexcept { return address->sa_family; } @@ -124,11 +124,11 @@ public: * Does the object have a well-defined address? Check !IsNull() * before calling this method. */ - bool IsDefined() const { + bool IsDefined() const noexcept { return GetFamily() != AF_UNSPEC; } - void Clear() { + void Clear() noexcept { free(address); address = nullptr; size = 0; diff --git a/src/net/StaticSocketAddress.hxx b/src/net/StaticSocketAddress.hxx index d2da90d2f..3b996ab88 100644 --- a/src/net/StaticSocketAddress.hxx +++ b/src/net/StaticSocketAddress.hxx @@ -51,52 +51,52 @@ public: StaticSocketAddress &operator=(SocketAddress other) noexcept; - operator SocketAddress() const { + operator SocketAddress() const noexcept { return SocketAddress(reinterpret_cast(&address), size); } - struct sockaddr *GetAddress() { + struct sockaddr *GetAddress() noexcept { return reinterpret_cast(&address); } - const struct sockaddr *GetAddress() const { + const struct sockaddr *GetAddress() const noexcept { return reinterpret_cast(&address); } - constexpr size_type GetCapacity() const { + constexpr size_type GetCapacity() const noexcept { return sizeof(address); } - size_type GetSize() const { + size_type GetSize() const noexcept { return size; } - void SetSize(size_type _size) { + void SetSize(size_type _size) noexcept { assert(_size > 0); assert(size_t(_size) <= sizeof(address)); size = _size; } - int GetFamily() const { + int GetFamily() const noexcept { return address.ss_family; } - bool IsDefined() const { + bool IsDefined() const noexcept { return GetFamily() != AF_UNSPEC; } - void Clear() { + void Clear() noexcept { address.ss_family = AF_UNSPEC; } gcc_pure - bool operator==(SocketAddress other) const { + bool operator==(SocketAddress other) const noexcept { return (SocketAddress)*this == other; } - bool operator!=(SocketAddress &other) const { + bool operator!=(SocketAddress &other) const noexcept { return !(*this == other); } }; diff --git a/src/output/MultipleOutputs.hxx b/src/output/MultipleOutputs.hxx index 014978882..0ae8acbab 100644 --- a/src/output/MultipleOutputs.hxx +++ b/src/output/MultipleOutputs.hxx @@ -85,7 +85,7 @@ public: * those which are disabled right now. */ gcc_pure - unsigned Size() const { + unsigned Size() const noexcept { return outputs.size(); } @@ -186,7 +186,7 @@ public: * finished yet. */ gcc_pure - SignedSongTime GetElapsedTime() const { + SignedSongTime GetElapsedTime() const noexcept { return elapsed_time; } diff --git a/src/output/plugins/AlsaOutputPlugin.cxx b/src/output/plugins/AlsaOutputPlugin.cxx index 5361f6431..cb243c406 100644 --- a/src/output/plugins/AlsaOutputPlugin.cxx +++ b/src/output/plugins/AlsaOutputPlugin.cxx @@ -132,7 +132,7 @@ public: } gcc_pure - const char *GetDevice() { + const char *GetDevice() const noexcept { return device.empty() ? default_device : device.c_str(); } diff --git a/src/output/plugins/OpenALOutputPlugin.cxx b/src/output/plugins/OpenALOutputPlugin.cxx index 508643112..65cefd33c 100644 --- a/src/output/plugins/OpenALOutputPlugin.cxx +++ b/src/output/plugins/OpenALOutputPlugin.cxx @@ -73,19 +73,19 @@ class OpenALOutput { private: gcc_pure - ALint GetSourceI(ALenum param) const { + ALint GetSourceI(ALenum param) const noexcept { ALint value; alGetSourcei(source, param, &value); return value; } gcc_pure - bool HasProcessed() const { + bool HasProcessed() const noexcept { return GetSourceI(AL_BUFFERS_PROCESSED) > 0; } gcc_pure - bool IsPlaying() const { + bool IsPlaying() const noexcept { return GetSourceI(AL_SOURCE_STATE) == AL_PLAYING; } diff --git a/src/output/plugins/RecorderOutputPlugin.cxx b/src/output/plugins/RecorderOutputPlugin.cxx index a934e3bfe..b615d85f2 100644 --- a/src/output/plugins/RecorderOutputPlugin.cxx +++ b/src/output/plugins/RecorderOutputPlugin.cxx @@ -97,7 +97,7 @@ class RecorderOutput { private: gcc_pure - bool HasDynamicPath() const { + bool HasDynamicPath() const noexcept { return !format_path.empty(); } diff --git a/src/output/plugins/httpd/HttpdInternal.hxx b/src/output/plugins/httpd/HttpdInternal.hxx index 331e83fc1..675f3d54e 100644 --- a/src/output/plugins/httpd/HttpdInternal.hxx +++ b/src/output/plugins/httpd/HttpdInternal.hxx @@ -191,7 +191,7 @@ public: * Caller must lock the mutex. */ gcc_pure - bool HasClients() const { + bool HasClients() const noexcept { return !clients.empty(); } @@ -199,7 +199,7 @@ public: * Check whether there is at least one client. */ gcc_pure - bool LockHasClients() const { + bool LockHasClients() const noexcept { const std::lock_guard protect(mutex); return HasClients(); } diff --git a/src/player/Thread.cxx b/src/player/Thread.cxx index 3e7ef8f90..4cbe1653b 100644 --- a/src/player/Thread.cxx +++ b/src/player/Thread.cxx @@ -247,7 +247,7 @@ private: * finished. */ gcc_pure - bool IsDecoderAtCurrentSong() const { + bool IsDecoderAtCurrentSong() const noexcept { assert(pipe != nullptr); return dc.pipe == pipe; @@ -259,7 +259,7 @@ private: * switched to that song yet. */ gcc_pure - bool IsDecoderAtNextSong() const { + bool IsDecoderAtNextSong() const noexcept { return dc.pipe != nullptr && !IsDecoderAtCurrentSong(); } diff --git a/src/queue/Queue.hxx b/src/queue/Queue.hxx index 805c2f4de..bd2f95c1a 100644 --- a/src/queue/Queue.hxx +++ b/src/queue/Queue.hxx @@ -162,14 +162,14 @@ struct Queue { } gcc_pure - unsigned OrderToPosition(unsigned _order) const { + unsigned OrderToPosition(unsigned _order) const noexcept { assert(_order < length); return order[_order]; } gcc_pure - unsigned PositionToOrder(unsigned position) const { + unsigned PositionToOrder(unsigned position) const noexcept { assert(position < length); for (unsigned i = 0;; ++i) { @@ -181,7 +181,7 @@ struct Queue { } gcc_pure - uint8_t GetPriorityAtPosition(unsigned position) const { + uint8_t GetPriorityAtPosition(unsigned position) const noexcept { assert(position < length); return items[position].priority; diff --git a/src/storage/CompositeStorage.cxx b/src/storage/CompositeStorage.cxx index cd3a702bf..7c6c87b17 100644 --- a/src/storage/CompositeStorage.cxx +++ b/src/storage/CompositeStorage.cxx @@ -149,7 +149,7 @@ CompositeStorage::Directory::Make(const char *uri) } bool -CompositeStorage::Directory::Unmount() +CompositeStorage::Directory::Unmount() noexcept { if (storage == nullptr) return false; @@ -160,7 +160,7 @@ CompositeStorage::Directory::Unmount() } bool -CompositeStorage::Directory::Unmount(const char *uri) +CompositeStorage::Directory::Unmount(const char *uri) noexcept { if (StringIsEmpty(uri)) return Unmount(); diff --git a/src/storage/CompositeStorage.hxx b/src/storage/CompositeStorage.hxx index db71fad8f..668d55a6a 100644 --- a/src/storage/CompositeStorage.hxx +++ b/src/storage/CompositeStorage.hxx @@ -55,7 +55,7 @@ class CompositeStorage final : public Storage { ~Directory(); gcc_pure - bool IsEmpty() const { + bool IsEmpty() const noexcept { return storage == nullptr && children.empty(); } @@ -64,8 +64,8 @@ class CompositeStorage final : public Storage { Directory &Make(const char *uri); - bool Unmount(); - bool Unmount(const char *uri); + bool Unmount() noexcept; + bool Unmount(const char *uri) noexcept; gcc_pure bool MapToRelativeUTF8(std::string &buffer, diff --git a/src/storage/plugins/CurlStorage.cxx b/src/storage/plugins/CurlStorage.cxx index 8dd736dad..d4177e4a3 100644 --- a/src/storage/plugins/CurlStorage.cxx +++ b/src/storage/plugins/CurlStorage.cxx @@ -511,7 +511,7 @@ private: * to the base file name. */ gcc_pure - StringView HrefToEscapedName(const char *href) const { + StringView HrefToEscapedName(const char *href) const noexcept { const char *path = uri_get_path(href); if (path == nullptr) return nullptr; diff --git a/src/tag/MixRamp.cxx b/src/tag/MixRamp.cxx index f5597794f..a8eab0bef 100644 --- a/src/tag/MixRamp.cxx +++ b/src/tag/MixRamp.cxx @@ -53,7 +53,7 @@ ParseMixRampTag(MixRampInfo &info, const char *name, const char *value) const char *value; gcc_pure - const char *operator[](const char *n) const { + const char *operator[](const char *n) const noexcept { return StringEqualsCaseASCII(name, n) ? value : nullptr; @@ -70,7 +70,7 @@ ParseMixRampVorbis(MixRampInfo &info, const char *entry) const char *entry; gcc_pure - const char *operator[](const char *n) const { + const char *operator[](const char *n) const noexcept { return vorbis_comment_value(entry, n); } }; diff --git a/src/tag/ReplayGain.cxx b/src/tag/ReplayGain.cxx index 963469373..10f2f8a32 100644 --- a/src/tag/ReplayGain.cxx +++ b/src/tag/ReplayGain.cxx @@ -60,7 +60,7 @@ ParseReplayGainTag(ReplayGainInfo &info, const char *name, const char *value) const char *value; gcc_pure - const char *operator[](const char *n) const { + const char *operator[](const char *n) const noexcept { return StringEqualsCaseASCII(name, n) ? value : nullptr; @@ -77,7 +77,7 @@ ParseReplayGainVorbis(ReplayGainInfo &info, const char *entry) const char *entry; gcc_pure - const char *operator[](const char *n) const { + const char *operator[](const char *n) const noexcept { return vorbis_comment_value(entry, n); } }; diff --git a/src/tag/Set.cxx b/src/tag/Set.cxx index 8becc4cf8..34e823c89 100644 --- a/src/tag/Set.cxx +++ b/src/tag/Set.cxx @@ -67,7 +67,7 @@ CopyTagMask(TagBuilder &dest, const Tag &src, tag_mask_t mask) void TagSet::InsertUnique(const Tag &src, TagType type, const char *value, - tag_mask_t group_mask) + tag_mask_t group_mask) noexcept { TagBuilder builder; if (value == nullptr) @@ -85,7 +85,7 @@ TagSet::InsertUnique(const Tag &src, TagType type, const char *value, bool TagSet::CheckUnique(TagType dest_type, const Tag &tag, TagType src_type, - tag_mask_t group_mask) + tag_mask_t group_mask) noexcept { bool found = false; @@ -101,7 +101,7 @@ TagSet::CheckUnique(TagType dest_type, void TagSet::InsertUnique(const Tag &tag, - TagType type, tag_mask_t group_mask) + TagType type, tag_mask_t group_mask) noexcept { static_assert(sizeof(group_mask) * 8 >= TAG_NUM_OF_ITEM_TYPES, "Mask is too small"); diff --git a/src/tag/Set.hxx b/src/tag/Set.hxx index c07c736e7..8e19b7ca2 100644 --- a/src/tag/Set.hxx +++ b/src/tag/Set.hxx @@ -33,7 +33,7 @@ */ struct TagLess { gcc_pure - bool operator()(const Tag &a, const Tag &b) const { + bool operator()(const Tag &a, const Tag &b) const noexcept { if (a.num_items != b.num_items) return a.num_items < b.num_items; @@ -59,15 +59,15 @@ struct TagLess { class TagSet : public std::set { public: void InsertUnique(const Tag &tag, - TagType type, tag_mask_t group_mask); + TagType type, tag_mask_t group_mask) noexcept; private: void InsertUnique(const Tag &src, TagType type, const char *value, - tag_mask_t group_mask); + tag_mask_t group_mask) noexcept; bool CheckUnique(TagType dest_type, const Tag &tag, TagType src_type, - tag_mask_t group_mask); + tag_mask_t group_mask) noexcept; }; #endif diff --git a/src/tag/TagBuilder.hxx b/src/tag/TagBuilder.hxx index 2ec1ae876..b69d23689 100644 --- a/src/tag/TagBuilder.hxx +++ b/src/tag/TagBuilder.hxx @@ -82,7 +82,7 @@ public: * Returns true if the object contains any information. */ gcc_pure - bool IsDefined() const { + bool IsDefined() const noexcept { return !duration.IsNegative() || has_playlist || !IsEmpty(); } diff --git a/src/thread/Id.hxx b/src/thread/Id.hxx index 169cb1af8..4b0b9109e 100644 --- a/src/thread/Id.hxx +++ b/src/thread/Id.hxx @@ -53,7 +53,7 @@ public: #endif gcc_const - static ThreadId Null() { + static ThreadId Null() noexcept { #ifdef WIN32 return 0; #else @@ -63,7 +63,7 @@ public: } gcc_pure - bool IsNull() const { + bool IsNull() const noexcept { return *this == Null(); } @@ -80,7 +80,7 @@ public: } gcc_pure - bool operator==(const ThreadId &other) const { + bool operator==(const ThreadId &other) const noexcept { #ifdef WIN32 return id == other.id; #else diff --git a/src/thread/Thread.hxx b/src/thread/Thread.hxx index a699ba09c..99ad4da9d 100644 --- a/src/thread/Thread.hxx +++ b/src/thread/Thread.hxx @@ -77,7 +77,7 @@ public: * Check if this thread is the current thread. */ gcc_pure - bool IsInside() const { + bool IsInside() const noexcept { #ifdef WIN32 return GetCurrentThreadId() == id; #else diff --git a/src/util/ConstBuffer.hxx b/src/util/ConstBuffer.hxx index 67d7253d8..4f4901564 100644 --- a/src/util/ConstBuffer.hxx +++ b/src/util/ConstBuffer.hxx @@ -140,7 +140,7 @@ struct ConstBuffer { template gcc_pure - bool Contains(U &&u) const { + bool Contains(U &&u) const noexcept { for (const auto &i : *this) if (u == i) return true; diff --git a/src/util/StringView.cxx b/src/util/StringView.cxx index b1abf9615..7e77e5459 100644 --- a/src/util/StringView.cxx +++ b/src/util/StringView.cxx @@ -31,14 +31,14 @@ #include "CharUtil.hxx" void -StringView::StripLeft() +StringView::StripLeft() noexcept { while (!IsEmpty() && IsWhitespaceOrNull(front())) pop_front(); } void -StringView::StripRight() +StringView::StripRight() noexcept { while (!IsEmpty() && IsWhitespaceOrNull(back())) pop_back(); diff --git a/src/util/StringView.hxx b/src/util/StringView.hxx index dce93d388..ee304b6ac 100644 --- a/src/util/StringView.hxx +++ b/src/util/StringView.hxx @@ -64,67 +64,67 @@ struct StringView : ConstBuffer { return StringView("", size_t(0)); } - void SetEmpty() { + void SetEmpty() noexcept { data = ""; size = 0; } gcc_pure - pointer_type Find(char ch) const { + pointer_type Find(char ch) const noexcept { return (pointer_type)memchr(data, ch, size); } - StringView &operator=(std::nullptr_t) { + StringView &operator=(std::nullptr_t) noexcept { data = nullptr; size = 0; return *this; } - StringView &operator=(pointer_type _data) { + StringView &operator=(pointer_type _data) noexcept { data = _data; size = _data != nullptr ? strlen(_data) : 0; return *this; } gcc_pure - bool StartsWith(StringView needle) const { + bool StartsWith(StringView needle) const noexcept { return size >= needle.size && memcmp(data, needle.data, needle.size) == 0; } gcc_pure - bool Equals(StringView other) const { + bool Equals(StringView other) const noexcept { return size == other.size && memcmp(data, other.data, size) == 0; } template - bool EqualsLiteral(const char (&other)[n]) const { + bool EqualsLiteral(const char (&other)[n]) const noexcept { return Equals(Literal(other)); } gcc_pure - bool EqualsIgnoreCase(StringView other) const { + bool EqualsIgnoreCase(StringView other) const noexcept { return size == other.size && strncasecmp(data, other.data, size) == 0; } template - bool EqualsLiteralIgnoreCase(const char (&other)[n]) const { + bool EqualsLiteralIgnoreCase(const char (&other)[n]) const noexcept { return EqualsIgnoreCase(Literal(other)); } /** * Skip all whitespace at the beginning. */ - void StripLeft(); + void StripLeft() noexcept; /** * Skip all whitespace at the end. */ - void StripRight(); + void StripRight() noexcept; - void Strip() { + void Strip() noexcept { StripLeft(); StripRight(); } diff --git a/test/FakeDecoderAPI.cxx b/test/FakeDecoderAPI.cxx index 2310c335c..ce915ba1e 100644 --- a/test/FakeDecoderAPI.cxx +++ b/test/FakeDecoderAPI.cxx @@ -45,7 +45,7 @@ FakeDecoder::Ready(const AudioFormat audio_format, } DecoderCommand -FakeDecoder::GetCommand() +FakeDecoder::GetCommand() noexcept { return DecoderCommand::NONE; } @@ -56,13 +56,13 @@ FakeDecoder::CommandFinished() } SongTime -FakeDecoder::GetSeekTime() +FakeDecoder::GetSeekTime() noexcept { return SongTime(); } uint64_t -FakeDecoder::GetSeekFrame() +FakeDecoder::GetSeekFrame() noexcept { return 1; } diff --git a/test/FakeDecoderAPI.hxx b/test/FakeDecoderAPI.hxx index 9fb98859c..2f6b8d9d3 100644 --- a/test/FakeDecoderAPI.hxx +++ b/test/FakeDecoderAPI.hxx @@ -34,10 +34,10 @@ struct FakeDecoder final : DecoderClient { /* virtual methods from DecoderClient */ void Ready(AudioFormat audio_format, bool seekable, SignedSongTime duration) override; - DecoderCommand GetCommand() override; + DecoderCommand GetCommand() noexcept override; void CommandFinished() override; - SongTime GetSeekTime() override; - uint64_t GetSeekFrame() override; + SongTime GetSeekTime() noexcept override; + uint64_t GetSeekFrame() noexcept override; void SeekError() override; InputStreamPtr OpenUri(const char *uri) override; size_t Read(InputStream &is, void *buffer, size_t length) override;