Commit f510564d authored by Max Kellermann's avatar Max Kellermann

more [[gnu::...]] attributes

parent 1c4b484a
......@@ -25,8 +25,6 @@
#ifndef MPD_IDLE_FLAGS_HXX
#define MPD_IDLE_FLAGS_HXX
#include "util/Compiler.h"
/** song database has been updated*/
static constexpr unsigned IDLE_DATABASE = 0x1;
......@@ -73,7 +71,7 @@ static constexpr unsigned IDLE_PARTITION = 0x2000;
/**
* Get idle names
*/
gcc_const
[[gnu::const]]
const char*const*
idle_get_names() noexcept;
......@@ -81,7 +79,7 @@ idle_get_names() noexcept;
* Parse an idle name and return its mask. Returns 0 if the given
* name is unknown.
*/
gcc_nonnull_all gcc_pure
[[gnu::nonnull]] [[gnu::pure]]
unsigned
idle_parse_name(const char *name) noexcept;
......
......@@ -24,7 +24,6 @@
#include "event/Loop.hxx"
#include "event/Thread.hxx"
#include "event/MaskMonitor.hxx"
#include "util/Compiler.h"
#ifdef ENABLE_SYSTEMD_DAEMON
#include "lib/systemd/Watchdog.hxx"
......@@ -168,7 +167,7 @@ struct Instance final
* Find a #Partition with the given name. Returns nullptr if
* no such partition was found.
*/
gcc_pure
[[gnu::pure]]
Partition *FindPartition(const char *name) noexcept;
void DeletePartition(Partition &partition) noexcept;
......
......@@ -24,7 +24,6 @@
#ifndef MPD_MAPPER_HXX
#define MPD_MAPPER_HXX
#include "util/Compiler.h"
#include "config.h"
#include <string>
......@@ -44,7 +43,7 @@ mapper_init(AllocatedPath &&playlist_dir);
* is basically done by converting the URI to the file system charset
* and prepending the music directory.
*/
gcc_pure
[[gnu::pure]]
AllocatedPath
map_uri_fs(const char *uri) noexcept;
......@@ -56,7 +55,7 @@ map_uri_fs(const char *uri) noexcept;
* @return the relative path in UTF-8, or an empty string if mapping
* failed
*/
gcc_pure
[[gnu::pure]]
std::string
map_fs_to_utf8(Path path_fs) noexcept;
......@@ -65,7 +64,7 @@ map_fs_to_utf8(Path path_fs) noexcept;
/**
* Returns the playlist directory.
*/
gcc_const
[[gnu::const]]
const AllocatedPath &
map_spl_path() noexcept;
......@@ -75,7 +74,7 @@ map_spl_path() noexcept;
*
* @return the path in file system encoding, or nullptr if mapping failed
*/
gcc_pure
[[gnu::pure]]
AllocatedPath
map_spl_utf8_to_fs(const char *name) noexcept;
......
......@@ -20,8 +20,6 @@
#ifndef MPD_MIX_RAMP_INFO_HXX
#define MPD_MIX_RAMP_INFO_HXX
#include "util/Compiler.h"
#include <string>
class MixRampInfo {
......@@ -35,17 +33,17 @@ public:
end.clear();
}
gcc_pure
[[gnu::pure]]
bool IsDefined() const noexcept {
return !start.empty() || !end.empty();
}
gcc_pure
[[gnu::pure]]
const char *GetStart() const noexcept {
return start.empty() ? nullptr : start.c_str();
}
gcc_pure
[[gnu::pure]]
const char *GetEnd() const noexcept {
return end.empty() ? nullptr : end.c_str();
}
......
......@@ -63,7 +63,7 @@ public:
* is the same value which was passed to the constructor
* music_buffer_new().
*/
gcc_pure
[[gnu::pure]]
unsigned GetSize() const noexcept {
return buffer.GetCapacity();
}
......
......@@ -105,7 +105,7 @@ struct MusicChunkInfo {
* Checks if the audio format if the chunk is equal to the
* specified audio_format.
*/
gcc_pure
[[gnu::pure]]
bool CheckFormat(AudioFormat audio_format) const noexcept;
#endif
};
......
......@@ -22,7 +22,6 @@
#include "MusicChunkPtr.hxx"
#include "thread/Mutex.hxx"
#include "util/Compiler.h"
#ifndef NDEBUG
#include "pcm/AudioFormat.hxx"
......@@ -59,7 +58,7 @@ public:
* Checks if the audio format if the chunk is equal to the specified
* audio_format.
*/
gcc_pure
[[gnu::pure]]
bool CheckFormat(AudioFormat other) const noexcept {
return !audio_format.IsDefined() ||
audio_format == other;
......@@ -68,7 +67,7 @@ public:
/**
* Checks if the specified chunk is enqueued in the music pipe.
*/
gcc_pure
[[gnu::pure]]
bool Contains(const MusicChunk *chunk) const noexcept;
#endif
......@@ -76,7 +75,7 @@ public:
* Returns the first #MusicChunk from the pipe. Returns
* nullptr if the pipe is empty.
*/
gcc_pure
[[gnu::pure]]
const MusicChunk *Peek() const noexcept {
const std::lock_guard<Mutex> protect(mutex);
return head.get();
......@@ -100,13 +99,13 @@ public:
/**
* Returns the number of chunks currently in this pipe.
*/
gcc_pure
[[gnu::pure]]
unsigned GetSize() const noexcept {
const std::lock_guard<Mutex> protect(mutex);
return size;
}
gcc_pure
[[gnu::pure]]
bool IsEmpty() const noexcept {
return GetSize() == 0;
}
......
......@@ -20,7 +20,6 @@
#ifndef MPD_REPLAY_GAIN_INFO_HXX
#define MPD_REPLAY_GAIN_INFO_HXX
#include "util/Compiler.h"
#include "ReplayGainMode.hxx"
struct ReplayGainConfig;
......@@ -42,7 +41,7 @@ struct ReplayGainTuple {
return {-200.0f, 0.0f};
}
gcc_pure
[[gnu::pure]]
float CalculateScale(const ReplayGainConfig &config) const noexcept;
};
......
......@@ -18,6 +18,7 @@
*/
#include "ReplayGainMode.hxx"
#include "util/Compiler.h"
#include <cassert>
#include <stdexcept>
......
......@@ -20,8 +20,6 @@
#ifndef MPD_REPLAY_GAIN_MODE_HXX
#define MPD_REPLAY_GAIN_MODE_HXX
#include "util/Compiler.h"
#include <cstdint>
enum class ReplayGainMode : uint8_t {
......@@ -34,7 +32,7 @@ enum class ReplayGainMode : uint8_t {
/**
* Return the string representation of a #ReplayGainMode.
*/
gcc_pure
[[gnu::pure]]
const char *
ToString(ReplayGainMode mode) noexcept;
......
......@@ -18,6 +18,7 @@
*/
#include "SingleMode.hxx"
#include "util/Compiler.h"
#include <cassert>
#include <stdexcept>
......
......@@ -20,8 +20,6 @@
#ifndef MPD_SINGLE_MODE_HXX
#define MPD_SINGLE_MODE_HXX
#include "util/Compiler.h"
#include <cstdint>
enum class SingleMode : uint8_t {
......@@ -33,7 +31,7 @@ enum class SingleMode : uint8_t {
/**
* Return the string representation of a #SingleMode.
*/
gcc_pure
[[gnu::pure]]
const char *
SingleToString(SingleMode mode) noexcept;
......
......@@ -20,7 +20,6 @@
#ifndef MPD_SONG_LOADER_HXX
#define MPD_SONG_LOADER_HXX
#include "util/Compiler.h"
#include "config.h"
#include <cstddef>
......@@ -72,14 +71,14 @@ public:
/**
* Throws #std::runtime_error on error.
*/
gcc_nonnull_all
[[gnu::nonnull]]
DetachedSong LoadSong(const char *uri_utf8) const;
private:
gcc_nonnull_all
[[gnu::nonnull]]
DetachedSong LoadFromDatabase(const char *uri) const;
gcc_nonnull_all
[[gnu::nonnull]]
DetachedSong LoadFile(const char *path_utf8, Path path_fs) const;
};
......
......@@ -22,7 +22,6 @@
#include "StateFileConfig.hxx"
#include "event/FarTimerEvent.hxx"
#include "util/Compiler.h"
#include "config.h"
#include <string>
......@@ -76,7 +75,7 @@ private:
* Check if MPD's state was modified since the last
* RememberVersions() call.
*/
gcc_pure
[[gnu::pure]]
bool IsModified() const noexcept;
/* callback for #timer_event */
......
......@@ -27,7 +27,6 @@
#include "tag/Mask.hxx"
#include "event/FullyBufferedSocket.hxx"
#include "event/CoarseTimerEvent.hxx"
#include "util/Compiler.h"
#include <boost/intrusive/link_mode.hpp>
#include <boost/intrusive/list_hook.hpp>
......@@ -138,7 +137,7 @@ public:
using FullyBufferedSocket::GetEventLoop;
using FullyBufferedSocket::GetOutputMaxSize;
gcc_pure
[[gnu::pure]]
bool IsExpired() const noexcept {
return !FullyBufferedSocket::IsDefined();
}
......@@ -211,7 +210,7 @@ public:
FULL,
};
gcc_pure
[[gnu::pure]]
bool IsSubscribed(const char *channel_name) const noexcept {
return subscriptions.find(channel_name) != subscriptions.end();
}
......@@ -252,19 +251,19 @@ public:
void SetPartition(Partition &new_partition) noexcept;
gcc_pure
[[gnu::pure]]
Instance &GetInstance() const noexcept;
gcc_pure
[[gnu::pure]]
playlist &GetPlaylist() const noexcept;
gcc_pure
[[gnu::pure]]
PlayerControl &GetPlayerControl() const noexcept;
/**
* Wrapper for Instance::GetDatabase().
*/
gcc_pure
[[gnu::pure]]
const Database *GetDatabase() const noexcept;
/**
......@@ -272,7 +271,7 @@ public:
*/
const Database &GetDatabaseOrThrow() const;
gcc_pure
[[gnu::pure]]
const Storage *GetStorage() const noexcept;
private:
......
......@@ -20,8 +20,6 @@
#ifndef MPD_CLIENT_MESSAGE_HXX
#define MPD_CLIENT_MESSAGE_HXX
#include "util/Compiler.h"
#include <string>
#ifdef _WIN32
......@@ -51,7 +49,7 @@ public:
}
};
gcc_pure
[[gnu::pure]]
bool
client_message_valid_channel_name(const char *name) noexcept;
......
......@@ -21,14 +21,13 @@
#define MPD_NEIGHBOR_COMMANDS_HXX
#include "CommandResult.hxx"
#include "util/Compiler.h"
struct Instance;
class Client;
class Request;
class Response;
gcc_pure
[[gnu::pure]]
bool
neighbor_commands_available(const Instance &instance) noexcept;
......
......@@ -21,13 +21,12 @@
#define MPD_PLAYLIST_COMMANDS_HXX
#include "CommandResult.hxx"
#include "util/Compiler.h"
class Client;
class Request;
class Response;
gcc_const
[[gnu::const]]
bool
playlist_commands_available() noexcept;
......
......@@ -20,8 +20,6 @@
#ifndef MPD_CONFIG_BLOCK_HXX
#define MPD_CONFIG_BLOCK_HXX
#include "util/Compiler.h"
#include <string>
#include <vector>
......@@ -39,7 +37,7 @@ struct BlockParam {
mutable bool used = false;
template<typename N, typename V>
gcc_nonnull_all
[[gnu::nonnull]]
BlockParam(N &&_name, V &&_value, int _line=-1) noexcept
:name(std::forward<N>(_name)), value(std::forward<V>(_value)),
line(_line) {}
......@@ -99,7 +97,7 @@ struct ConfigBlock {
return line < 0;
}
gcc_pure
[[gnu::pure]]
bool IsEmpty() const noexcept {
return block_params.empty();
}
......@@ -109,17 +107,17 @@ struct ConfigBlock {
}
template<typename N, typename V>
gcc_nonnull_all
[[gnu::nonnull]]
void AddBlockParam(N &&_name, V &&_value, int _line=-1) noexcept {
block_params.emplace_back(std::forward<N>(_name),
std::forward<V>(_value),
_line);
}
gcc_nonnull_all gcc_pure
[[gnu::nonnull]] [[gnu::pure]]
const BlockParam *GetBlockParam(const char *_name) const noexcept;
gcc_pure
[[gnu::pure]]
const char *GetBlockValue(const char *name,
const char *default_value=nullptr) const noexcept;
......
......@@ -46,7 +46,7 @@ struct ConfigData {
void AddParam(ConfigOption option, ConfigParam &&param) noexcept;
gcc_pure
[[gnu::pure]]
const ConfigParam *GetParam(ConfigOption option) const noexcept {
const auto &list = GetParamList(option);
return list.empty() ? nullptr : &list.front();
......@@ -60,7 +60,7 @@ struct ConfigData {
: f(nullptr);
}
gcc_pure
[[gnu::pure]]
const char *GetString(ConfigOption option,
const char *default_value=nullptr) const noexcept;
......@@ -100,7 +100,7 @@ struct ConfigData {
ConfigBlock &AddBlock(ConfigBlockOption option,
ConfigBlock &&block) noexcept;
gcc_pure
[[gnu::pure]]
const ConfigBlock *GetBlock(ConfigBlockOption option) const noexcept {
const auto &list = GetBlockList(option);
return list.empty() ? nullptr : &list.front();
......@@ -115,7 +115,7 @@ struct ConfigData {
* @param key the attribute name
* @param value the expected attribute value
*/
gcc_pure
[[gnu::pure]]
const ConfigBlock *FindBlock(ConfigBlockOption option,
const char *key, const char *value) const;
......
......@@ -102,14 +102,14 @@ enum class ConfigBlockOption {
/**
* @return #ConfigOption::MAX if not found
*/
gcc_pure
[[gnu::pure]]
enum ConfigOption
ParseConfigOptionName(const char *name) noexcept;
/**
* @return #ConfigOption::MAX if not found
*/
gcc_pure
[[gnu::pure]]
enum ConfigBlockOption
ParseConfigBlockOptionName(const char *name) noexcept;
......
......@@ -35,7 +35,7 @@ struct ConfigParam {
:line(_line) {}
template<typename V>
gcc_nonnull_all
[[gnu::nonnull]]
explicit ConfigParam(V &&_value, int _line=-1) noexcept
:value(std::forward<V>(_value)), line(_line) {}
......
......@@ -27,7 +27,6 @@
#define MPD_DB_LOCK_HXX
#include "thread/Mutex.hxx"
#include "util/Compiler.h"
#include <cassert>
......@@ -42,7 +41,7 @@ extern ThreadId db_mutex_holder;
/**
* Does the current thread hold the database lock?
*/
gcc_pure
[[gnu::pure]]
static inline bool
holding_db_lock() noexcept
{
......
......@@ -22,7 +22,6 @@
#include "Visitor.hxx"
#include "tag/Type.h"
#include "util/Compiler.h"
#include <chrono>
#include <string>
......@@ -136,7 +135,7 @@ public:
* Returns the time stamp of the last database update.
* Returns a negative value if that is not not known/available.
*/
gcc_pure
[[gnu::pure]]
virtual std::chrono::system_clock::time_point GetUpdateStamp() const noexcept = 0;
};
......
......@@ -20,12 +20,9 @@
#ifndef MPD_LIGHT_DIRECTORY_HXX
#define MPD_LIGHT_DIRECTORY_HXX
#include "util/Compiler.h"
#include <chrono>
#include <string>
#include <time.h>
struct Tag;
/**
......@@ -53,7 +50,7 @@ struct LightDirectory {
return *uri == 0;
}
gcc_pure
[[gnu::pure]]
const char *GetPath() const noexcept {
return uri;
}
......
......@@ -20,8 +20,6 @@
#ifndef MPD_PLAYLIST_INFO_HXX
#define MPD_PLAYLIST_INFO_HXX
#include "util/Compiler.h"
#include <string>
#include <string_view>
#include <chrono>
......@@ -49,7 +47,7 @@ struct PlaylistInfo {
constexpr CompareName(std::string_view _name) noexcept
:name(_name) {}
gcc_pure
[[gnu::pure]]
bool operator()(const PlaylistInfo &pi) const noexcept {
return pi.name == name;
}
......
......@@ -21,7 +21,6 @@
#define MPD_PLAYLIST_VECTOR_HXX
#include "db/PlaylistInfo.hxx"
#include "util/Compiler.h"
#include <list>
#include <string_view>
......@@ -31,7 +30,7 @@ protected:
/**
* Caller must lock the #db_mutex.
*/
gcc_pure
[[gnu::pure]]
iterator find(std::string_view name) noexcept;
public:
......
......@@ -20,8 +20,6 @@
#ifndef MPD_DATABASE_REGISTRY_HXX
#define MPD_DATABASE_REGISTRY_HXX
#include "util/Compiler.h"
struct DatabasePlugin;
/**
......@@ -30,7 +28,7 @@ struct DatabasePlugin;
*/
extern const DatabasePlugin *const database_plugins[];
gcc_pure
[[gnu::pure]]
const DatabasePlugin *
GetDatabasePluginByName(const char *name) noexcept;
......
......@@ -22,7 +22,6 @@
#include "protocol/RangeArg.hxx"
#include "tag/Type.h"
#include "util/Compiler.h"
#include <string>
......@@ -60,16 +59,16 @@ struct DatabaseSelection {
DatabaseSelection(const char *_uri, bool _recursive,
const SongFilter *_filter=nullptr) noexcept;
gcc_pure
[[gnu::pure]]
bool IsEmpty() const noexcept;
/**
* Does this selection contain constraints other than "base"?
*/
gcc_pure
[[gnu::pure]]
bool HasOtherThanBase() const noexcept;
gcc_pure
[[gnu::pure]]
bool Match(const LightSong &song) const noexcept;
};
......
......@@ -21,7 +21,6 @@
#define MPD_DIRECTORY_HXX
#include "Ptr.hxx"
#include "util/Compiler.h"
#include "db/Visitor.hxx"
#include "db/PlaylistVector.hxx"
#include "db/Ptr.hxx"
......@@ -113,7 +112,7 @@ public:
/**
* Create a new root #Directory object.
*/
gcc_malloc gcc_returns_nonnull
[[gnu::malloc]] [[gnu::returns_nonnull]]
static Directory *NewRoot() noexcept {
return new Directory(std::string(), nullptr);
}
......@@ -141,7 +140,7 @@ public:
* (e.g. #DEVICE_PLAYLIST) and whether the underlying plugin
* is available.
*/
gcc_pure
[[gnu::pure]]
bool IsPluginAvailable() const noexcept;
/**
......@@ -164,10 +163,10 @@ public:
/**
* Caller must lock the #db_mutex.
*/
gcc_pure
[[gnu::pure]]
const Directory *FindChild(std::string_view name) const noexcept;
gcc_pure
[[gnu::pure]]
Directory *FindChild(std::string_view name) noexcept {
const Directory *cthis = this;
return const_cast<Directory *>(cthis->FindChild(name));
......@@ -211,20 +210,20 @@ public:
*
* @param uri the relative URI
*/
gcc_pure
[[gnu::pure]]
LookupResult LookupDirectory(std::string_view uri) noexcept;
[[gnu::pure]]
bool TargetExists(std::string_view target) const noexcept;
gcc_pure
[[gnu::pure]]
bool IsEmpty() const noexcept {
return children.empty() &&
songs.empty() &&
playlists.empty();
}
gcc_pure
[[gnu::pure]]
const char *GetPath() const noexcept {
return path.c_str();
}
......@@ -232,13 +231,13 @@ public:
/**
* Returns the base name of the directory.
*/
gcc_pure
[[gnu::pure]]
const char *GetName() const noexcept;
/**
* Is this the root directory of the music database?
*/
gcc_pure
[[gnu::pure]]
bool IsRoot() const noexcept {
return parent == nullptr;
}
......@@ -266,10 +265,10 @@ public:
*
* Caller must lock the #db_mutex.
*/
gcc_pure
[[gnu::pure]]
const Song *FindSong(std::string_view name_utf8) const noexcept;
gcc_pure
[[gnu::pure]]
Song *FindSong(std::string_view name_utf8) noexcept {
const Directory *cthis = this;
return const_cast<Song *>(cthis->FindSong(name_utf8));
......@@ -307,7 +306,7 @@ public:
const VisitDirectory& visit_directory, const VisitSong& visit_song,
const VisitPlaylist& visit_playlist) const;
gcc_pure
[[gnu::pure]]
LightDirectory Export() const noexcept;
};
......
......@@ -25,7 +25,6 @@
#include "db/Ptr.hxx"
#include "fs/AllocatedPath.hxx"
#include "util/Manual.hxx"
#include "util/Compiler.h"
#include "config.h"
#include <cassert>
......@@ -78,7 +77,7 @@ public:
DatabaseListener &listener,
const ConfigBlock &block);
gcc_pure
[[gnu::pure]]
Directory &GetRoot() noexcept {
assert(root != NULL);
......@@ -98,7 +97,7 @@ public:
* @param db the #Database to be mounted; must be "open"; on
* success, this object gains ownership of the given #Database
*/
gcc_nonnull_all
[[gnu::nonnull]]
void Mount(const char *uri, DatabasePtr db);
/**
......@@ -106,10 +105,10 @@ public:
*
* @return false if the mounted database needs to be updated
*/
gcc_nonnull_all
[[gnu::nonnull]]
bool Mount(const char *local_uri, const char *storage_uri);
gcc_nonnull_all
[[gnu::nonnull]]
bool Unmount(const char *uri) noexcept;
/* virtual methods from class Database */
......
......@@ -24,7 +24,6 @@
#include "Chrono.hxx"
#include "tag/Tag.hxx"
#include "pcm/AudioFormat.hxx"
#include "util/Compiler.h"
#include "config.h"
#include <boost/intrusive/list.hpp>
......@@ -108,14 +107,14 @@ struct Song {
Song(DetachedSong &&other, Directory &_parent) noexcept;
gcc_pure
[[gnu::pure]]
const char *GetFilenameSuffix() const noexcept;
/**
* Checks whether the decoder plugin for this song is
* available.
*/
gcc_pure
[[gnu::pure]]
bool IsPluginAvailable() const noexcept;
/**
......@@ -149,10 +148,10 @@ struct Song {
* Returns the URI of the song in UTF-8 encoding, including its
* location within the music directory.
*/
gcc_pure
[[gnu::pure]]
std::string GetURI() const noexcept;
gcc_pure
[[gnu::pure]]
ExportedSong Export() const noexcept;
};
......
......@@ -33,7 +33,7 @@
/* this destructor exists here just so it won't get inlined */
UPnPDirContent::~UPnPDirContent() = default;
gcc_pure
[[gnu::pure]]
static UPnPDirObject::ItemClass
ParseItemClass(StringView name) noexcept
{
......@@ -45,7 +45,7 @@ ParseItemClass(StringView name) noexcept
return UPnPDirObject::ItemClass::UNKNOWN;
}
gcc_pure
[[gnu::pure]]
static SignedSongTime
ParseDuration(const char *duration) noexcept
{
......@@ -73,7 +73,7 @@ ParseDuration(const char *duration) noexcept
* elements. There is a very slight risk of collision in doing
* this. Twonky returns directory names (titles) like 'Artist/Album'.
*/
gcc_pure
[[gnu::pure]]
static std::string &&
TitleToPathSegment(std::string &&s) noexcept
{
......
......@@ -21,7 +21,6 @@
#define MPD_UPNP_DIRECTORY_HXX
#include "Object.hxx"
#include "util/Compiler.h"
#include <string>
#include <vector>
......@@ -39,7 +38,7 @@ public:
~UPnPDirContent();
gcc_pure
[[gnu::pure]]
UPnPDirObject *FindObject(std::string_view name) noexcept {
for (auto &o : objects)
if (o.name == name)
......
......@@ -21,7 +21,6 @@
#define MPD_UPNP_OBJECT_HXX
#include "tag/Tag.hxx"
#include "util/Compiler.h"
#include <string>
......@@ -89,12 +88,12 @@ public:
tag.Clear();
}
gcc_pure
[[gnu::pure]]
bool IsRoot() const noexcept {
return type == Type::CONTAINER && id == "0";
}
gcc_pure
[[gnu::pure]]
bool Check() const noexcept {
return !id.empty() &&
/* root nodes don't need a parent id and a
......
......@@ -25,7 +25,6 @@
#ifndef MPD_EXCLUDE_H
#define MPD_EXCLUDE_H
#include "util/Compiler.h"
#include "fs/Glob.hxx"
#include "input/Ptr.hxx"
#include "config.h"
......@@ -50,7 +49,7 @@ public:
ExcludeList(const ExcludeList &_parent) noexcept
:parent(&_parent) {}
gcc_pure
[[gnu::pure]]
bool IsEmpty() const noexcept {
#ifdef HAVE_CLASS_GLOB
return ((parent == nullptr) || parent->IsEmpty()) && patterns.empty();
......
......@@ -20,8 +20,6 @@
#ifndef MPD_UPDATE_QUEUE_HXX
#define MPD_UPDATE_QUEUE_HXX
#include "util/Compiler.h"
#include <string>
#include <string_view>
#include <list>
......@@ -61,7 +59,6 @@ class UpdateQueue {
std::list<UpdateQueueItem> update_queue;
public:
gcc_nonnull_all
bool Push(SimpleDatabase &db, Storage &storage,
std::string_view path, bool discard, unsigned id) noexcept;
......@@ -71,10 +68,8 @@ public:
update_queue.clear();
}
gcc_nonnull_all
void Erase(SimpleDatabase &db) noexcept;
gcc_nonnull_all
void Erase(Storage &storage) noexcept;
};
......
......@@ -24,7 +24,6 @@
#include "Queue.hxx"
#include "event/InjectEvent.hxx"
#include "thread/Thread.hxx"
#include "util/Compiler.h"
#include <memory>
#include <string_view>
......@@ -90,7 +89,6 @@ public:
* the whole music directory is updated
* @return the job id
*/
gcc_nonnull_all
unsigned Enqueue(std::string_view path, bool discard);
/**
......
......@@ -20,8 +20,6 @@
#ifndef MPD_UPDATE_IO_HXX
#define MPD_UPDATE_IO_HXX
#include "util/Compiler.h"
#include <string_view>
struct Directory;
......@@ -43,11 +41,11 @@ GetInfo(Storage &storage, const char *uri_utf8, StorageFileInfo &info) noexcept;
bool
GetInfo(StorageDirectoryReader &reader, StorageFileInfo &info) noexcept;
gcc_pure
[[gnu::pure]]
bool
DirectoryExists(Storage &storage, const Directory &directory) noexcept;
gcc_pure
[[gnu::pure]]
bool
directory_child_is_regular(Storage &storage, const Directory &directory,
std::string_view name_utf8) noexcept;
......@@ -55,7 +53,7 @@ directory_child_is_regular(Storage &storage, const Directory &directory,
/**
* Checks if the given permissions on the mapped file are given.
*/
gcc_pure
[[gnu::pure]]
bool
directory_child_access(Storage &storage, const Directory &directory,
std::string_view name, int mode) noexcept;
......
......@@ -22,7 +22,6 @@
#include "Config.hxx"
#include "Editor.hxx"
#include "util/Compiler.h"
#include "config.h"
#include <atomic>
......@@ -76,7 +75,7 @@ public:
bool Walk(Directory &root, const char *path, bool discard) noexcept;
private:
gcc_pure
[[gnu::pure]]
bool SkipSymlink(const Directory *directory,
std::string_view utf8_name) const noexcept;
......
......@@ -132,7 +132,7 @@ public:
*
* Caller must lock the #DecoderControl object.
*/
gcc_pure
[[gnu::pure]]
bool CheckCancelRead() const noexcept;
/**
......
......@@ -23,7 +23,6 @@
#include "Command.hxx"
#include "Chrono.hxx"
#include "input/Ptr.hxx"
#include "util/Compiler.h"
#include <cstdint>
......@@ -57,7 +56,7 @@ public:
* @return the current command, or DecoderCommand::NONE if there is no
* command pending
*/
gcc_pure
[[gnu::pure]]
virtual DecoderCommand GetCommand() noexcept = 0;
/**
......@@ -72,7 +71,7 @@ public:
*
* @return the destination position for the seek
*/
gcc_pure
[[gnu::pure]]
virtual SongTime GetSeekTime() noexcept = 0;
/**
......@@ -80,7 +79,7 @@ public:
*
* @return the destination position for the seek in frames
*/
gcc_pure
[[gnu::pure]]
virtual uint64_t GetSeekFrame() noexcept = 0;
/**
......
......@@ -229,7 +229,7 @@ public:
state == DecoderState::ERROR;
}
gcc_pure
[[gnu::pure]]
bool LockIsIdle() const noexcept {
const std::lock_guard<Mutex> protect(mutex);
return IsIdle();
......@@ -239,7 +239,7 @@ public:
return state == DecoderState::START;
}
gcc_pure
[[gnu::pure]]
bool LockIsStarting() const noexcept {
const std::lock_guard<Mutex> protect(mutex);
return IsStarting();
......@@ -251,7 +251,7 @@ public:
return state == DecoderState::ERROR;
}
gcc_pure
[[gnu::pure]]
bool LockHasFailed() const noexcept {
const std::lock_guard<Mutex> protect(mutex);
return HasFailed();
......@@ -307,15 +307,15 @@ public:
*
* Caller must lock the object.
*/
gcc_pure
[[gnu::pure]]
bool IsCurrentSong(const DetachedSong &_song) const noexcept;
gcc_pure
[[gnu::pure]]
bool IsUnseekableCurrentSong(const DetachedSong &_song) const noexcept {
return !seekable && IsCurrentSong(_song);
}
gcc_pure
[[gnu::pure]]
bool IsSeekableCurrentSong(const DetachedSong &_song) const noexcept {
return seekable && IsCurrentSong(_song);
}
......
......@@ -20,7 +20,6 @@
#ifndef MPD_DECODER_BUFFER_HXX
#define MPD_DECODER_BUFFER_HXX
#include "util/Compiler.h"
#include "util/DynamicFifoBuffer.hxx"
#include "util/ConstBuffer.hxx"
......@@ -74,7 +73,7 @@ public:
/**
* How many bytes are stored in the buffer?
*/
gcc_pure
[[gnu::pure]]
size_t GetAvailable() const noexcept {
return buffer.GetAvailable();
}
......
......@@ -20,8 +20,6 @@
#ifndef MPD_DECODER_LIST_HXX
#define MPD_DECODER_LIST_HXX
#include "util/Compiler.h"
#include <string_view>
struct ConfigData;
......@@ -32,7 +30,7 @@ extern bool decoder_plugins_enabled[];
/* interface for using plugins */
gcc_pure
[[gnu::pure]]
const struct DecoderPlugin *
decoder_plugin_from_name(const char *name) noexcept;
......@@ -98,7 +96,7 @@ decoder_plugins_for_each_enabled(F f)
* Is there at least once #DecoderPlugin that supports the specified
* file name suffix?
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]]
bool
decoder_plugins_supports_suffix(std::string_view suffix) noexcept;
......
......@@ -20,8 +20,6 @@
#ifndef MPD_DECODER_PLUGIN_HXX
#define MPD_DECODER_PLUGIN_HXX
#include "util/Compiler.h"
#include <forward_list> // IWYU pragma: export
#include <set>
#include <string>
......@@ -246,19 +244,19 @@ struct DecoderPlugin {
return container_scan(path, tnum);
}
gcc_pure
[[gnu::pure]]
bool SupportsUri(const char *uri) const noexcept;
/**
* Does the plugin announce the specified file name suffix?
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]]
bool SupportsSuffix(std::string_view suffix) const noexcept;
/**
* Does the plugin announce the specified MIME type?
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]]
bool SupportsMimeType(std::string_view mime_type) const noexcept;
bool SupportsContainerSuffix(std::string_view suffix) const noexcept {
......
......@@ -22,7 +22,6 @@
#include "util/ByteOrder.hxx"
#include "input/Offset.hxx"
#include "util/Compiler.h"
#include <cstdint>
......@@ -33,7 +32,7 @@ class InputStream;
struct DsdId {
char value[4];
gcc_pure
[[gnu::pure]]
bool Equals(const char *s) const noexcept;
};
......@@ -70,7 +69,7 @@ dsdlib_skip(DecoderClient *client, InputStream &is,
/**
* Check if the sample frequency is a valid DSD frequency.
**/
gcc_const
[[gnu::const]]
bool
dsdlib_valid_freq(uint32_t samplefreq) noexcept;
......
......@@ -26,11 +26,9 @@
#ifndef MPD_FILTER_REGISTRY_HXX
#define MPD_FILTER_REGISTRY_HXX
#include "util/Compiler.h"
struct FilterPlugin;
gcc_pure
[[gnu::pure]]
const FilterPlugin *
filter_plugin_by_name(const char *name) noexcept;
......
......@@ -20,7 +20,6 @@
#ifndef MPD_FS_ALLOCATED_PATH_HXX
#define MPD_FS_ALLOCATED_PATH_HXX
#include "util/Compiler.h"
#include "Traits.hxx"
#include "Path.hxx"
......@@ -81,7 +80,7 @@ public:
~AllocatedPath() noexcept;
gcc_pure
[[gnu::pure]]
operator Path() const noexcept {
return Path::FromFS(c_str());
}
......@@ -89,40 +88,40 @@ public:
/**
* Join two path components with the path separator.
*/
gcc_pure
[[gnu::pure]]
static AllocatedPath Build(string_view a, string_view b) noexcept {
return AllocatedPath(Traits::Build(a, b));
}
gcc_pure gcc_nonnull_all
[[gnu::pure]]
static AllocatedPath Build(Path a, string_view b) noexcept {
return Build(a.c_str(), b);
}
gcc_pure gcc_nonnull_all
[[gnu::pure]]
static AllocatedPath Build(Path a, Path b) noexcept {
return Build(a, b.c_str());
}
gcc_pure gcc_nonnull_all
[[gnu::pure]]
static AllocatedPath Build(string_view a,
const AllocatedPath &b) noexcept {
return Build(a, b.value);
}
gcc_pure gcc_nonnull_all
[[gnu::pure]]
static AllocatedPath Build(const AllocatedPath &a,
string_view b) noexcept {
return Build(a.value, b);
}
gcc_pure
[[gnu::pure]]
static AllocatedPath Build(const AllocatedPath &a,
const AllocatedPath &b) noexcept {
return Build(a.value, b.value);
}
gcc_pure
[[gnu::pure]]
static AllocatedPath Apply(Path base, Path path) noexcept {
return Traits::Apply(base.c_str(), path.c_str());
}
......@@ -131,17 +130,17 @@ public:
* Convert a C string that is already in the filesystem
* character set to a #Path instance.
*/
gcc_pure
[[gnu::pure]]
static AllocatedPath FromFS(const_pointer fs) noexcept {
return AllocatedPath(fs);
}
gcc_pure
[[gnu::pure]]
static AllocatedPath FromFS(string_view fs) noexcept {
return AllocatedPath(fs);
}
gcc_pure
[[gnu::pure]]
static AllocatedPath FromFS(const_pointer _begin,
const_pointer _end) noexcept {
return AllocatedPath(_begin, _end);
......@@ -151,13 +150,13 @@ public:
* Convert a C++ string that is already in the filesystem
* character set to a #Path instance.
*/
gcc_pure
[[gnu::pure]]
static AllocatedPath FromFS(string &&fs) noexcept {
return AllocatedPath(std::move(fs));
}
#ifdef ANDROID
gcc_pure
[[gnu::pure]]
static AllocatedPath FromUTF8(std::string &&utf8) noexcept {
/* on Android, the filesystem charset is hard-coded to
UTF-8 */
......@@ -173,7 +172,7 @@ public:
* Convert a UTF-8 C string to an #AllocatedPath instance.
* Returns return a "nulled" instance on error.
*/
gcc_pure
[[gnu::pure]]
static AllocatedPath FromUTF8(std::string_view path_utf8) noexcept;
static AllocatedPath FromUTF8(const char *path_utf8) noexcept {
......@@ -199,12 +198,12 @@ public:
return *this;
}
gcc_pure
[[gnu::pure]]
bool operator==(const AllocatedPath &other) const noexcept {
return value == other.value;
}
gcc_pure
[[gnu::pure]]
bool operator!=(const AllocatedPath &other) const noexcept {
return value != other.value;
}
......@@ -238,7 +237,7 @@ public:
* @return the length of this string in number of "value_type"
* elements (which may not be the number of characters).
*/
gcc_pure
[[gnu::pure]]
size_t length() const noexcept {
return value.length();
}
......@@ -248,7 +247,7 @@ public:
* pointer is invalidated whenever the value of life of this
* instance ends.
*/
gcc_pure
[[gnu::pure]]
const_pointer c_str() const noexcept {
return value.c_str();
}
......@@ -257,7 +256,7 @@ public:
* Returns a pointer to the raw value, not necessarily
* null-terminated.
*/
gcc_pure
[[gnu::pure]]
const_pointer data() const noexcept {
return value.data();
}
......@@ -267,7 +266,7 @@ public:
* Returns empty string on error or if this instance is "nulled"
* (#IsNull returns true).
*/
gcc_pure
[[gnu::pure]]
std::string ToUTF8() const noexcept {
return ((Path)*this).ToUTF8();
}
......@@ -280,7 +279,7 @@ public:
* Gets directory name of this path.
* Returns a "nulled" instance on error.
*/
gcc_pure
[[gnu::pure]]
AllocatedPath GetDirectoryName() const noexcept {
return ((Path)*this).GetDirectoryName();
}
......@@ -291,12 +290,12 @@ public:
* empty string if the given path equals this object or
* nullptr on mismatch.
*/
gcc_pure
[[gnu::pure]]
const_pointer Relative(Path other_fs) const noexcept {
return Traits::Relative(c_str(), other_fs.c_str());
}
gcc_pure
[[gnu::pure]]
const_pointer GetSuffix() const noexcept {
return ((Path)*this).GetSuffix();
}
......@@ -306,7 +305,7 @@ public:
*/
void ChopSeparators() noexcept;
gcc_pure
[[gnu::pure]]
bool IsAbsolute() const noexcept {
return Traits::IsAbsolute(c_str());
}
......
......@@ -20,13 +20,12 @@
#ifndef MPD_FS_CHARSET_HXX
#define MPD_FS_CHARSET_HXX
#include "util/Compiler.h"
#include "Traits.hxx"
/**
* Gets file system character set name.
*/
gcc_const
[[gnu::const]]
const char *
GetFSCharset() noexcept;
......
......@@ -30,8 +30,6 @@
#endif
#ifdef HAVE_CLASS_GLOB
#include "util/Compiler.h"
#include <string>
/**
......@@ -48,7 +46,7 @@ public:
Glob(Glob &&other) noexcept = default;
Glob &operator=(Glob &&other) noexcept = default;
gcc_pure
[[gnu::pure]]
bool Check(const char *name_fs) const noexcept;
};
......
......@@ -20,7 +20,6 @@
#ifndef MPD_FS_PATH_HXX
#define MPD_FS_PATH_HXX
#include "util/Compiler.h"
#include "Traits.hxx"
#include <cassert>
......@@ -88,7 +87,7 @@ public:
* @return the length of this string in number of "value_type"
* elements (which may not be the number of characters).
*/
gcc_pure
[[gnu::pure]]
size_t length() const noexcept {
assert(!IsNull());
......@@ -117,7 +116,7 @@ public:
* usually rejected by MPD because its protocol cannot
* transfer newline characters).
*/
gcc_pure
[[gnu::pure]]
bool HasNewline() const noexcept {
return Traits::Find(c_str(), '\n') != nullptr;
}
......@@ -127,7 +126,7 @@ public:
* Returns empty string on error or if this instance is "nulled"
* (#IsNull returns true).
*/
gcc_pure
[[gnu::pure]]
std::string ToUTF8() const noexcept;
/**
......@@ -139,7 +138,7 @@ public:
* Determine the "base" file name.
* The return value points inside this object.
*/
gcc_pure
[[gnu::pure]]
Path GetBase() const noexcept {
return FromFS(Traits::GetBase(c_str()));
}
......@@ -148,7 +147,7 @@ public:
* Gets directory name of this path.
* Returns a "nulled" instance on error.
*/
gcc_pure
[[gnu::pure]]
AllocatedPath GetDirectoryName() const noexcept;
/**
......@@ -157,17 +156,17 @@ public:
* empty string if the given path equals this object or
* nullptr on mismatch.
*/
gcc_pure
[[gnu::pure]]
const_pointer Relative(Path other_fs) const noexcept {
return Traits::Relative(c_str(), other_fs.c_str());
}
gcc_pure
[[gnu::pure]]
bool IsAbsolute() const noexcept {
return Traits::IsAbsolute(c_str());
}
gcc_pure
[[gnu::pure]]
const_pointer GetSuffix() const noexcept;
};
......
......@@ -37,7 +37,7 @@ GetUserMusicDir() noexcept;
/**
* Obtains cache directory for the current user.
*/
gcc_pure
[[gnu::pure]]
AllocatedPath
GetUserCacheDir() noexcept;
......
......@@ -71,7 +71,7 @@ struct PathTraitsFS {
ch == SEPARATOR;
}
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static const_pointer FindLastSeparator(const_pointer p) noexcept {
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
......@@ -100,7 +100,7 @@ struct PathTraitsFS {
#endif
}
gcc_pure
[[gnu::pure]]
static const_pointer GetFilenameSuffix(const_pointer filename) noexcept {
const_pointer dot = StringFindLast(filename, '.');
return dot != nullptr && dot > filename && dot[1] != 0
......@@ -108,13 +108,13 @@ struct PathTraitsFS {
: nullptr;
}
gcc_pure
[[gnu::pure]]
static const_pointer GetPathSuffix(const_pointer path) noexcept {
return GetFilenameSuffix(GetBase(path));
}
#ifdef _WIN32
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static constexpr bool IsDrive(const_pointer p) noexcept {
return IsAlphaASCII(p[0]) && p[1] == ':';
}
......@@ -124,7 +124,7 @@ struct PathTraitsFS {
}
#endif
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static bool IsAbsolute(const_pointer p) noexcept {
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
......@@ -138,18 +138,18 @@ struct PathTraitsFS {
return IsSeparator(*p);
}
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static bool IsSpecialFilename(const_pointer name) noexcept {
return (name[0] == '.' && name[1] == 0) ||
(name[0] == '.' && name[1] == '.' && name[2] == 0);
}
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static size_t GetLength(const_pointer p) noexcept {
return StringLength(p);
}
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static const_pointer Find(const_pointer p, value_type ch) noexcept {
return StringFind(p, ch);
}
......@@ -158,7 +158,7 @@ struct PathTraitsFS {
* Determine the "base" file name of the given native path.
* The return value points inside the given string.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static const_pointer GetBase(const_pointer p) noexcept;
/**
......@@ -166,7 +166,7 @@ struct PathTraitsFS {
* As a special case, returns the string "." if there is no
* separator in the given input string.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static string_view GetParent(const_pointer p) noexcept;
[[gnu::pure]]
......@@ -178,10 +178,10 @@ struct PathTraitsFS {
* empty string if the given path equals this object or
* nullptr on mismatch.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static const_pointer Relative(string_view base, const_pointer other) noexcept;
gcc_pure
[[gnu::pure]]
static string_view Relative(string_view base, string_view other) noexcept;
/**
......@@ -190,14 +190,14 @@ struct PathTraitsFS {
* remaining component is returned unchanged.
* If both components are empty strings, empty string is returned.
*/
gcc_pure
[[gnu::pure]]
static string Build(string_view a, string_view b) noexcept;
/**
* Interpret the given path as being relative to the given
* base, and return the concatenated path.
*/
gcc_pure
[[gnu::pure]]
static string Apply(const_pointer base,
const_pointer path) noexcept;
};
......@@ -221,7 +221,7 @@ struct PathTraitsUTF8 {
return ch == SEPARATOR;
}
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static const_pointer FindLastSeparator(const_pointer p) noexcept {
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
......@@ -236,7 +236,7 @@ struct PathTraitsUTF8 {
return StringFindLast(p.data(), SEPARATOR, p.size());
}
gcc_pure
[[gnu::pure]]
static const_pointer GetFilenameSuffix(const_pointer filename) noexcept {
const_pointer dot = StringFindLast(filename, '.');
return dot != nullptr && dot > filename && dot[1] != 0
......@@ -244,13 +244,13 @@ struct PathTraitsUTF8 {
: nullptr;
}
gcc_pure
[[gnu::pure]]
static const_pointer GetPathSuffix(const_pointer path) noexcept {
return GetFilenameSuffix(GetBase(path));
}
#ifdef _WIN32
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static constexpr bool IsDrive(const_pointer p) noexcept {
return IsAlphaASCII(p[0]) && p[1] == ':';
}
......@@ -260,7 +260,7 @@ struct PathTraitsUTF8 {
}
#endif
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static bool IsAbsolute(const_pointer p) noexcept {
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
......@@ -281,18 +281,18 @@ struct PathTraitsUTF8 {
[[gnu::pure]] [[gnu::nonnull]]
static bool IsAbsoluteOrHasScheme(const_pointer p) noexcept;
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static bool IsSpecialFilename(const_pointer name) noexcept {
return (name[0] == '.' && name[1] == 0) ||
(name[0] == '.' && name[1] == '.' && name[2] == 0);
}
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static size_t GetLength(const_pointer p) noexcept {
return StringLength(p);
}
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static const_pointer Find(const_pointer p, value_type ch) noexcept {
return StringFind(p, ch);
}
......@@ -301,7 +301,7 @@ struct PathTraitsUTF8 {
* Determine the "base" file name of the given UTF-8 path.
* The return value points inside the given string.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static const_pointer GetBase(const_pointer p) noexcept;
/**
......@@ -309,7 +309,7 @@ struct PathTraitsUTF8 {
* As a special case, returns the string "." if there is no
* separator in the given input string.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static string_view GetParent(const_pointer p) noexcept;
[[gnu::pure]]
......@@ -321,10 +321,10 @@ struct PathTraitsUTF8 {
* empty string if the given path equals this object or
* nullptr on mismatch.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static const_pointer Relative(string_view base, const_pointer other) noexcept;
gcc_pure
[[gnu::pure]]
static string_view Relative(string_view base, string_view other) noexcept;
/**
......@@ -333,7 +333,7 @@ struct PathTraitsUTF8 {
* remaining component is returned unchanged.
* If both components are empty strings, empty string is returned.
*/
gcc_pure
[[gnu::pure]]
static string Build(string_view a, string_view b) noexcept;
};
......
......@@ -25,7 +25,7 @@ AutoGunzipReader::AutoGunzipReader(Reader &_next) noexcept
AutoGunzipReader::~AutoGunzipReader() noexcept = default;
gcc_pure
[[gnu::pure]]
static bool
IsGzip(const uint8_t data[4]) noexcept
{
......
......@@ -30,7 +30,6 @@
#ifndef BUFFERED_READER_HXX
#define BUFFERED_READER_HXX
#include "util/Compiler.h"
#include "util/DynamicFifoBuffer.hxx"
#include <cstddef>
......@@ -64,7 +63,7 @@ public:
bool Fill(bool need_more);
gcc_pure
[[gnu::pure]]
WritableBuffer<void> Read() const noexcept {
return buffer.Read().ToVoid();
}
......
......@@ -32,7 +32,6 @@
#include "OutputStream.hxx"
#include "fs/AllocatedPath.hxx"
#include "util/Compiler.h"
#ifndef _WIN32
#include "io/FileDescriptor.hxx"
......@@ -133,7 +132,7 @@ public:
return path;
}
gcc_pure
[[gnu::pure]]
uint64_t Tell() const noexcept;
/* virtual methods from class OutputStream */
......
......@@ -32,7 +32,6 @@
#include "Reader.hxx"
#include "fs/AllocatedPath.hxx"
#include "util/Compiler.h"
#ifdef _WIN32
#include <fileapi.h>
......@@ -94,7 +93,7 @@ public:
FileInfo GetFileInfo() const;
gcc_pure
[[gnu::pure]]
uint64_t GetSize() const noexcept {
#ifdef _WIN32
LARGE_INTEGER size;
......@@ -106,7 +105,7 @@ public:
#endif
}
gcc_pure
[[gnu::pure]]
uint64_t GetPosition() const noexcept {
#ifdef _WIN32
LARGE_INTEGER zero;
......
......@@ -30,8 +30,6 @@
#ifndef READER_HXX
#define READER_HXX
#include "util/Compiler.h"
#include <cstddef>
/**
......@@ -52,7 +50,7 @@ public:
* @return the number of bytes read into the given buffer or 0
* on end-of-stream
*/
gcc_nonnull_all
[[gnu::nonnull]]
virtual size_t Read(void *data, size_t size) = 0;
};
......
......@@ -123,7 +123,7 @@ protected:
/**
* Determine how many bytes can be added to the buffer.
*/
gcc_pure
[[gnu::pure]]
size_t GetBufferSpace() const noexcept {
return buffer.GetSpace();
}
......
......@@ -20,8 +20,6 @@
#ifndef INPUT_ERROR_HXX
#define INPUT_ERROR_HXX
#include "util/Compiler.h"
#include <exception>
/**
......@@ -29,7 +27,7 @@
* exist? This function attempts to recognize exceptions thrown by
* various input plugins.
*/
gcc_pure
[[gnu::pure]]
bool
IsFileNotFound(std::exception_ptr e) noexcept;
......
......@@ -21,7 +21,6 @@
#define MPD_ICY_INPUT_STREAM_HXX
#include "ProxyInputStream.hxx"
#include "util/Compiler.h"
#include <memory>
......@@ -63,7 +62,7 @@ public:
IcyInputStream(const IcyInputStream &) = delete;
IcyInputStream &operator=(const IcyInputStream &) = delete;
gcc_pure
[[gnu::pure]]
bool IsEnabled() const noexcept;
/* virtual methods from InputStream */
......
......@@ -22,7 +22,6 @@
#include "Ptr.hxx"
#include "thread/Mutex.hxx"
#include "util/Compiler.h"
#include <cassert>
#include <set>
......@@ -83,7 +82,7 @@ struct InputPlugin {
std::unique_ptr<RemoteTagScanner> (*scan_tags)(const char *uri,
RemoteTagHandler &handler) = nullptr;
gcc_pure
[[gnu::pure]]
bool SupportsUri(const char *uri) const noexcept;
template<typename F>
......@@ -103,7 +102,7 @@ struct InputPlugin {
}
};
gcc_pure
[[gnu::pure]]
bool
protocol_is_whitelisted(const char *proto) noexcept;
......
......@@ -23,7 +23,6 @@
#include "Offset.hxx"
#include "Ptr.hxx"
#include "thread/Mutex.hxx"
#include "util/Compiler.h"
#include <cassert>
#include <memory>
......@@ -123,14 +122,12 @@ public:
* notifications
* @return an #InputStream object on success
*/
gcc_nonnull(1)
static InputStreamPtr Open(const char *uri, Mutex &mutex);
/**
* Just like Open(), but waits for the stream to become ready.
* It is a wrapper for Open(), WaitReady() and Check().
*/
gcc_nonnull(1)
static InputStreamPtr OpenReady(const char *uri, Mutex &mutex);
/**
......@@ -184,14 +181,14 @@ public:
return ready;
}
gcc_pure
[[gnu::pure]]
bool HasMimeType() const noexcept {
assert(ready);
return !mime.empty();
}
gcc_pure
[[gnu::pure]]
const char *GetMimeType() const noexcept {
assert(ready);
......@@ -202,7 +199,7 @@ public:
mime.clear();
}
gcc_nonnull_all
[[gnu::nonnull]]
void SetMimeType(const char *_mime) noexcept {
assert(!ready);
......@@ -215,14 +212,14 @@ public:
mime = std::move(_mime);
}
gcc_pure
[[gnu::pure]]
bool KnownSize() const noexcept {
assert(ready);
return size != UNKNOWN_SIZE;
}
gcc_pure
[[gnu::pure]]
offset_type GetSize() const noexcept {
assert(ready);
assert(KnownSize());
......@@ -236,14 +233,14 @@ public:
offset += delta;
}
gcc_pure
[[gnu::pure]]
offset_type GetOffset() const noexcept {
assert(ready);
return offset;
}
gcc_pure
[[gnu::pure]]
offset_type GetRest() const noexcept {
assert(ready);
assert(KnownSize());
......@@ -251,7 +248,7 @@ public:
return size - offset;
}
gcc_pure
[[gnu::pure]]
bool IsSeekable() const noexcept {
assert(ready);
......@@ -261,7 +258,7 @@ public:
/**
* Determines whether seeking is cheap. This is true for local files.
*/
gcc_pure
[[gnu::pure]]
bool CheapSeeking() const noexcept;
/**
......@@ -313,14 +310,14 @@ public:
*
* The caller must lock the mutex.
*/
gcc_pure
[[gnu::pure]]
virtual bool IsEOF() const noexcept = 0;
/**
* Wrapper for IsEOF() which locks and unlocks the mutex; the
* caller must not be holding it already.
*/
gcc_pure
[[gnu::pure]]
bool LockIsEOF() const noexcept;
/**
......@@ -346,7 +343,7 @@ public:
*
* The caller must lock the mutex.
*/
gcc_pure
[[gnu::pure]]
virtual bool IsAvailable() const noexcept;
/**
......@@ -363,7 +360,7 @@ public:
* @param size the maximum number of bytes to read
* @return the number of bytes read
*/
gcc_nonnull_all
[[gnu::nonnull]]
virtual size_t Read(std::unique_lock<Mutex> &lock,
void *ptr, size_t size) = 0;
......@@ -373,7 +370,7 @@ public:
*
* Throws std::runtime_error on error.
*/
gcc_nonnull_all
[[gnu::nonnull]]
size_t LockRead(void *ptr, size_t size);
/**
......@@ -387,7 +384,7 @@ public:
* @param size the number of bytes to read
* @return true if the whole data was read, false otherwise.
*/
gcc_nonnull_all
[[gnu::nonnull]]
void ReadFull(std::unique_lock<Mutex> &lock, void *ptr, size_t size);
/**
......@@ -396,7 +393,7 @@ public:
*
* Throws std::runtime_error on error.
*/
gcc_nonnull_all
[[gnu::nonnull]]
void LockReadFull(void *ptr, size_t size);
protected:
......
......@@ -20,8 +20,6 @@
#ifndef MPD_INPUT_REGISTRY_HXX
#define MPD_INPUT_REGISTRY_HXX
#include "util/Compiler.h"
/**
* NULL terminated list of all input plugins which were enabled at
* compile time.
......@@ -40,7 +38,7 @@ extern bool input_plugins_enabled[];
input_plugins_for_each(plugin) \
if (input_plugins_enabled[input_plugin_iterator - input_plugins])
gcc_pure
[[gnu::pure]]
bool
HasRemoteTagScanner(const char *uri) noexcept;
......
......@@ -21,7 +21,6 @@
#define MPD_INPUT_CACHE_MANAGER_HXX
#include "thread/Mutex.hxx"
#include "util/Compiler.h"
#include <boost/intrusive/set.hpp>
#include <boost/intrusive/list.hpp>
......@@ -43,15 +42,15 @@ class InputCacheManager {
size_t total_size = 0;
struct ItemCompare {
gcc_pure
[[gnu::pure]]
bool operator()(const InputCacheItem &a,
const char *b) const noexcept;
gcc_pure
[[gnu::pure]]
bool operator()(const char *a,
const InputCacheItem &b) const noexcept;
gcc_pure
[[gnu::pure]]
bool operator()(const InputCacheItem &a,
const InputCacheItem &b) const noexcept;
};
......@@ -74,7 +73,7 @@ public:
void Flush() noexcept;
gcc_pure
[[gnu::pure]]
bool Contains(const char *uri) noexcept;
/**
......
......@@ -55,7 +55,7 @@ public:
offset_type offset) override;
};
gcc_const
[[gnu::const]]
static inline bool
input_ffmpeg_supported() noexcept
{
......
......@@ -77,7 +77,7 @@ public:
return format_id;
}
gcc_pure
[[gnu::pure]]
CurlGlobal &GetCurl() noexcept;
void AddLoginHandler(QobuzSessionHandler &h) noexcept;
......
......@@ -166,7 +166,7 @@ FinishQobuzInput() noexcept
delete qobuz_client;
}
gcc_pure
[[gnu::pure]]
static const char *
ExtractQobuzTrackId(const char *uri)
{
......
......@@ -48,10 +48,10 @@ class File : public LocalObject {
public:
using LocalObject::LocalObject;
gcc_nonnull_all
[[gnu::nonnull]]
static void Initialise(JNIEnv *env) noexcept;
gcc_nonnull_all
[[gnu::nonnull]]
static jstring GetAbsolutePath(JNIEnv *env, jobject file) noexcept {
return (jstring)env->CallObjectMethod(file,
getAbsolutePath_method);
......@@ -69,7 +69,7 @@ public:
* Invoke File.getAbsolutePath() and release the
* specified File reference.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]] [[gnu::nonnull]]
static AllocatedPath ToAbsolutePath(JNIEnv *env,
jobject file) noexcept;
};
......
......@@ -30,8 +30,6 @@
#ifndef JAVA_GLOBAL_HXX
#define JAVA_GLOBAL_HXX
#include "util/Compiler.h"
#include <jni.h>
namespace Java {
......@@ -47,8 +45,9 @@ DetachCurrentThread() noexcept
jvm->DetachCurrentThread();
}
static inline gcc_pure
JNIEnv *GetEnv() noexcept
[[gnu::pure]]
static inline JNIEnv *
GetEnv() noexcept
{
JNIEnv *env;
jvm->AttachCurrentThread(&env, nullptr);
......
......@@ -43,7 +43,7 @@
* enum. Returns SND_PCM_FORMAT_UNKNOWN if there is no according ALSA
* PCM format.
*/
gcc_const
[[gnu::const]]
inline snd_pcm_format_t
ToAlsaPcmFormat(SampleFormat sample_format) noexcept
{
......@@ -82,7 +82,7 @@ ToAlsaPcmFormat(SampleFormat sample_format) noexcept
* Determine the byte-swapped PCM format. Returns
* SND_PCM_FORMAT_UNKNOWN if the format cannot be byte-swapped.
*/
gcc_const
[[gnu::const]]
inline snd_pcm_format_t
ByteSwapAlsaPcmFormat(snd_pcm_format_t fmt) noexcept
{
......@@ -123,8 +123,7 @@ ByteSwapAlsaPcmFormat(snd_pcm_format_t fmt) noexcept
* Check if there is a "packed" version of the give PCM format.
* Returns SND_PCM_FORMAT_UNKNOWN if not.
*/
gcc_const
inline snd_pcm_format_t
constexpr snd_pcm_format_t
PackAlsaPcmFormat(snd_pcm_format_t fmt) noexcept
{
switch (fmt) {
......
......@@ -23,7 +23,7 @@
#include <stdlib.h>
gcc_pure
[[gnu::pure]]
static uint_least32_t
ParseAlsaVersion(const char *p) noexcept
{
......
......@@ -20,8 +20,6 @@
#ifndef MPD_ALSA_VERSION_HXX
#define MPD_ALSA_VERSION_HXX
#include "util/Compiler.h"
#include <cstdint>
static constexpr uint_least32_t
......@@ -35,7 +33,7 @@ MakeAlsaVersion(uint_least32_t major, uint_least32_t minor,
* Wrapper for snd_asoundlib_version() which translates the resulting
* string to an integer constructed with MakeAlsaVersion().
*/
gcc_const
[[gnu::const]]
uint_least32_t
GetRuntimeAlsaVersion() noexcept;
......
......@@ -31,7 +31,6 @@
#define CDIO_PARANOIA_HXX
#include "util/ConstBuffer.hxx"
#include "util/Compiler.h"
#include <cdio/version.h>
#include <cdio/paranoia/paranoia.h>
......@@ -88,7 +87,7 @@ public:
return std::pair(first, last);
}
gcc_pure
[[gnu::pure]]
bool IsAudioTrack(track_t i) const noexcept {
return cdio_cddap_track_audiop(drv, i);
}
......@@ -101,7 +100,7 @@ public:
return std::pair(first, last);
}
gcc_pure
[[gnu::pure]]
unsigned GetTrackCount() const noexcept {
return cdio_cddap_tracks(drv);
}
......
......@@ -31,7 +31,6 @@
#define MD5_HXX
#include "util/StringBuffer.hxx"
#include "util/Compiler.h"
#include <array>
#include <cstdint>
......@@ -41,11 +40,11 @@ template<typename T> struct ConstBuffer;
void
GlobalInitMD5() noexcept;
gcc_pure
[[gnu::pure]]
std::array<uint8_t, 16>
MD5(ConstBuffer<void> input) noexcept;
gcc_pure
[[gnu::pure]]
StringBuffer<33>
MD5Hex(ConstBuffer<void> input) noexcept;
......
/*
* Copyright 2016-2018 Max Kellermann <max.kellermann@gmail.com>
* Copyright 2016-2021 Max Kellermann <max.kellermann@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
......@@ -31,7 +31,6 @@
#define CURL_EASY_HXX
#include "String.hxx"
#include "util/Compiler.h"
#include <curl/curl.h>
......@@ -199,7 +198,7 @@ public:
/**
* Returns the response body's size, or -1 if that is unknown.
*/
gcc_pure
[[gnu::pure]]
int64_t GetContentLength() const noexcept {
double value;
return GetInfo(CURLINFO_CONTENT_LENGTH_DOWNLOAD, &value)
......
......@@ -31,6 +31,7 @@
#include "Request.hxx"
#include "event/Loop.hxx"
#include "event/SocketEvent.hxx"
#include "util/Compiler.h"
#include <cassert>
......@@ -84,7 +85,7 @@ private:
(flags & SocketEvent::ERROR ? CURL_CSELECT_ERR : 0);
}
gcc_const
[[gnu::const]]
static unsigned CurlPollToFlags(int action) noexcept {
switch (action) {
case CURL_POLL_NONE:
......@@ -172,7 +173,7 @@ CurlGlobal::Remove(CurlRequest &r) noexcept
/**
* Find a request by its CURL "easy" handle.
*/
gcc_pure
[[gnu::pure]]
static CurlRequest *
ToRequest(CURL *easy) noexcept
{
......
......@@ -172,7 +172,7 @@ CurlRequest::Done(CURLcode result) noexcept
}
}
gcc_pure
[[gnu::pure]]
static bool
IsResponseBoundaryHeader(StringView s) noexcept
{
......
......@@ -30,9 +30,7 @@
#ifndef CURL_VERSION_HXX
#define CURL_VERSION_HXX
#include "util/Compiler.h"
gcc_const
[[gnu::const]]
bool
IsCurlOlderThan(unsigned version_num) noexcept;
......
......@@ -33,8 +33,6 @@
#ifndef ODBUS_ERROR_HXX
#define ODBUS_ERROR_HXX
#include "util/Compiler.h"
#include <dbus/dbus.h>
namespace ODBus {
......@@ -54,7 +52,7 @@ public:
Error(const Error &) = delete;
Error &operator=(const Error &) = delete;
gcc_pure
[[gnu::pure]]
operator bool() const noexcept {
return dbus_error_is_set(&error);
}
......
......@@ -20,8 +20,6 @@
#ifndef MPD_EXPAT_HXX
#define MPD_EXPAT_HXX
#include "util/Compiler.h"
#include <expat.h>
#include <stdexcept>
......@@ -80,11 +78,11 @@ public:
void Parse(InputStream &is);
gcc_pure
[[gnu::pure]]
static const char *GetAttribute(const XML_Char **atts,
const char *name) noexcept;
gcc_pure
[[gnu::pure]]
static const char *GetAttributeCase(const XML_Char **atts,
const char *name) noexcept;
};
......@@ -117,13 +115,13 @@ public:
parser.CompleteParse();
}
gcc_pure
[[gnu::pure]]
static const char *GetAttribute(const XML_Char **atts,
const char *name) noexcept {
return ExpatParser::GetAttribute(atts, name);
}
gcc_pure
[[gnu::pure]]
static const char *GetAttributeCase(const XML_Char **atts,
const char *name) noexcept {
return ExpatParser::GetAttributeCase(atts, name);
......
......@@ -20,8 +20,6 @@
#ifndef MPD_FFMPEG_BUFFER_HXX
#define MPD_FFMPEG_BUFFER_HXX
#include "util/Compiler.h"
extern "C" {
#include <libavutil/mem.h>
}
......@@ -42,7 +40,7 @@ public:
FfmpegBuffer(const FfmpegBuffer &) = delete;
FfmpegBuffer &operator=(const FfmpegBuffer &) = delete;
gcc_malloc
[[gnu::malloc]]
void *Get(size_t min_size) noexcept {
av_fast_malloc(&data, &size, min_size);
return data;
......
......@@ -20,7 +20,6 @@
#ifndef MPD_FFMPEG_IO_CONTEXT_HXX
#define MPD_FFMPEG_IO_CONTEXT_HXX
#include "util/Compiler.h"
#include "Error.hxx"
extern "C" {
......@@ -65,12 +64,12 @@ public:
return io_context;
}
gcc_pure
[[gnu::pure]]
auto GetSize() const noexcept {
return avio_size(io_context);
}
gcc_pure
[[gnu::pure]]
bool IsEOF() const noexcept {
return avio_feof(io_context) != 0;
}
......
......@@ -21,7 +21,6 @@
#define MPD_FFMPEG_TIME_HXX
#include "Chrono.hxx"
#include "util/Compiler.h"
extern "C" {
#include <libavutil/avutil.h>
......@@ -41,7 +40,7 @@ static constexpr AVRational AV_TIME_BASE_Q{1, AV_TIME_BASE};
/**
* Convert a FFmpeg time stamp to a floating point value (in seconds).
*/
gcc_const
[[gnu::const]]
static inline FloatDuration
FfmpegTimeToDouble(int64_t t, const AVRational time_base) noexcept
{
......@@ -64,7 +63,7 @@ RatioToAVRational()
/**
* Convert a FFmpeg time stamp to a #SongTime.
*/
gcc_const
[[gnu::const]]
static inline SongTime
FromFfmpegTime(int64_t t, const AVRational time_base) noexcept
{
......@@ -77,7 +76,7 @@ FromFfmpegTime(int64_t t, const AVRational time_base) noexcept
/**
* Convert a FFmpeg time stamp to a #SignedSongTime.
*/
gcc_const
[[gnu::const]]
static inline SignedSongTime
FromFfmpegTimeChecked(int64_t t, const AVRational time_base) noexcept
{
......@@ -89,7 +88,7 @@ FromFfmpegTimeChecked(int64_t t, const AVRational time_base) noexcept
/**
* Convert a #SongTime to a FFmpeg time stamp with the given base.
*/
gcc_const
[[gnu::const]]
static inline int64_t
ToFfmpegTime(SongTime t, const AVRational time_base) noexcept
{
......@@ -104,7 +103,7 @@ ToFfmpegTime(SongTime t, const AVRational time_base) noexcept
constexpr int64_t
FfmpegTimestampFallback(int64_t t, int64_t fallback)
{
return gcc_likely(t != int64_t(AV_NOPTS_VALUE))
return t != int64_t(AV_NOPTS_VALUE)
? t
: fallback;
}
......
......@@ -31,7 +31,6 @@
#define GCRYPT_HASH_HXX
#include "util/ConstBuffer.hxx"
#include "util/Compiler.h"
#include <gcrypt.h>
......@@ -40,7 +39,7 @@
namespace Gcrypt {
template<int algo, size_t size>
gcc_pure
[[gnu::pure]]
auto
Hash(ConstBuffer<void> input) noexcept
{
......
......@@ -31,7 +31,6 @@
#define GCRYPT_MD5_HXX
#include "util/StringBuffer.hxx"
#include "util/Compiler.h"
#include <array>
#include <cstdint>
......@@ -40,7 +39,7 @@ template<typename T> struct ConstBuffer;
namespace Gcrypt {
gcc_pure
[[gnu::pure]]
std::array<uint8_t, 16>
MD5(ConstBuffer<void> input) noexcept;
......
......@@ -76,7 +76,7 @@ IcuCollateFinish() noexcept
#endif
gcc_pure
[[gnu::pure]]
int
IcuCollate(std::string_view a, std::string_view b) noexcept
{
......
......@@ -20,8 +20,6 @@
#ifndef MPD_ICU_COLLATE_HXX
#define MPD_ICU_COLLATE_HXX
#include "util/Compiler.h"
#include <string_view>
/**
......@@ -33,7 +31,7 @@ IcuCollateInit();
void
IcuCollateFinish() noexcept;
gcc_pure
[[gnu::pure]]
int
IcuCollate(std::string_view a, std::string_view b) noexcept;
......
......@@ -20,7 +20,6 @@
#ifndef MPD_ICU_COMPARE_HXX
#define MPD_ICU_COMPARE_HXX
#include "util/Compiler.h"
#include "util/AllocatedString.hxx"
#include <string_view>
......@@ -63,15 +62,15 @@ public:
IcuCompare(IcuCompare &&) = default;
IcuCompare &operator=(IcuCompare &&) = default;
gcc_pure
[[gnu::pure]]
operator bool() const noexcept {
return needle != nullptr;
}
gcc_pure
[[gnu::pure]]
bool operator==(const char *haystack) const noexcept;
gcc_pure
[[gnu::pure]]
bool IsIn(const char *haystack) const noexcept;
};
......
......@@ -20,7 +20,6 @@
#ifndef MPD_ICU_CONVERTER_HXX
#define MPD_ICU_CONVERTER_HXX
#include "util/Compiler.h"
#include "config.h"
#ifdef HAVE_ICU
......@@ -84,7 +83,6 @@ public:
*
* Throws std::runtime_error on error.
*/
gcc_nonnull_all
AllocatedString ToUTF8(std::string_view s) const;
/**
......@@ -92,7 +90,6 @@ public:
*
* Throws std::runtime_error on error.
*/
gcc_nonnull_all
AllocatedString FromUTF8(std::string_view s) const;
};
......
......@@ -20,8 +20,6 @@
#ifndef MPD_ICU_WIN32_HXX
#define MPD_ICU_WIN32_HXX
#include "util/Compiler.h"
#include <string_view>
class AllocatedString;
......@@ -30,14 +28,14 @@ template<typename T> class BasicAllocatedString;
/**
* Throws std::system_error on error.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]]
AllocatedString
WideCharToMultiByte(unsigned code_page, std::wstring_view src);
/**
* Throws std::system_error on error.
*/
gcc_pure gcc_nonnull_all
[[gnu::pure]]
BasicAllocatedString<wchar_t>
MultiByteToWideChar(unsigned code_page, std::string_view src);
......
......@@ -20,8 +20,6 @@
#ifndef MPD_NFS_BASE_HXX
#define MPD_NFS_BASE_HXX
#include "util/Compiler.h"
/**
* Set the "base" NFS server and export name. This will be the
* default export that will be mounted if a file within this export is
......@@ -38,7 +36,7 @@ nfs_set_base(const char *server, const char *export_name) noexcept;
* "path" after the export_name is returned; otherwise, nullptr is
* returned.
*/
gcc_pure
[[gnu::pure]]
const char *
nfs_check_base(const char *server, const char *path) noexcept;
......
......@@ -20,8 +20,6 @@
#ifndef MPD_NFS_CANCELLABLE_HXX
#define MPD_NFS_CANCELLABLE_HXX
#include "util/Compiler.h"
#include <boost/intrusive/list.hpp>
#include <algorithm>
......@@ -89,35 +87,35 @@ private:
}
};
gcc_pure
[[gnu::pure]]
iterator Find(reference p) noexcept {
return std::find_if(list.begin(), list.end(), MatchPointer(p));
}
gcc_pure
[[gnu::pure]]
const_iterator Find(const_reference p) const noexcept {
return std::find_if(list.begin(), list.end(), MatchPointer(p));
}
gcc_pure
[[gnu::pure]]
iterator Find(CT &c) noexcept {
return list.iterator_to(c);
}
gcc_pure
[[gnu::pure]]
const_iterator Find(const CT &c) const noexcept {
return list.iterator_to(c);
}
public:
#ifndef NDEBUG
gcc_pure
[[gnu::pure]]
bool IsEmpty() const noexcept {
return std::all_of(list.begin(), list.end(), [](const auto &c) { return c.IsCancelled(); });
}
#endif
gcc_pure
[[gnu::pure]]
bool Contains(const_reference p) const noexcept {
return Find(p) != list.end();
}
......
......@@ -24,7 +24,6 @@
#include "event/SocketEvent.hxx"
#include "event/CoarseTimerEvent.hxx"
#include "event/DeferEvent.hxx"
#include "util/Compiler.h"
#include <string>
#include <list>
......@@ -139,7 +138,7 @@ class NfsConnection {
bool mount_finished;
public:
gcc_nonnull_all
[[gnu::nonnull]]
NfsConnection(EventLoop &_loop,
const char *_server, const char *_export_name) noexcept
:socket_event(_loop, BIND_THIS_METHOD(OnSocketReady)),
......@@ -157,12 +156,12 @@ public:
return socket_event.GetEventLoop();
}
gcc_pure
[[gnu::pure]]
const char *GetServer() const noexcept {
return server.c_str();
}
gcc_pure
[[gnu::pure]]
const char *GetExportName() const noexcept {
return export_name.c_str();
}
......
......@@ -20,8 +20,6 @@
#ifndef MPD_NFS_GLUE_HXX
#define MPD_NFS_GLUE_HXX
#include "util/Compiler.h"
class EventLoop;
class NfsConnection;
......@@ -34,11 +32,11 @@ nfs_finish() noexcept;
/**
* Return the EventLoop that was passed to nfs_init().
*/
gcc_const
[[gnu::const]]
EventLoop &
nfs_get_event_loop() noexcept;
gcc_pure
[[gnu::pure]]
NfsConnection &
nfs_get_connection(const char *server, const char *export_name) noexcept;
......
......@@ -21,7 +21,6 @@
#define MPD_NFS_MANAGER_HXX
#include "Connection.hxx"
#include "util/Compiler.h"
#include "event/IdleEvent.hxx"
#include <boost/intrusive/set.hpp>
......@@ -56,15 +55,15 @@ class NfsManager final {
};
struct Compare {
gcc_pure
[[gnu::pure]]
bool operator()(const LookupKey a,
const ManagedConnection &b) const noexcept;
gcc_pure
[[gnu::pure]]
bool operator()(const ManagedConnection &a,
const LookupKey b) const noexcept;
gcc_pure
[[gnu::pure]]
bool operator()(const ManagedConnection &a,
const ManagedConnection &b) const noexcept;
};
......@@ -102,7 +101,7 @@ public:
return idle_event.GetEventLoop();
}
gcc_pure
[[gnu::pure]]
NfsConnection &GetConnection(const char *server,
const char *export_name) noexcept;
......
......@@ -59,7 +59,7 @@ public:
return re != nullptr;
}
gcc_pure
[[gnu::pure]]
bool Match(StringView s) const noexcept {
/* we don't need the data written to ovector, but PCRE can
omit internal allocations if we pass a buffer to
......
......@@ -21,7 +21,6 @@
#define _UPNPDIR_HXX_INCLUDED_
#include "Compat.hxx"
#include "util/Compiler.h"
#include <string>
#include <forward_list>
......@@ -112,7 +111,7 @@ public:
*/
std::forward_list<std::string> getSearchCapabilities(UpnpClient_Handle handle) const;
gcc_pure
[[gnu::pure]]
std::string GetURI() const noexcept {
return "upnp://" + m_deviceId + "/" + m_serviceType;
}
......
......@@ -20,8 +20,6 @@
#ifndef MPD_FLAC_METADATA_CHAIN_HXX
#define MPD_FLAC_METADATA_CHAIN_HXX
#include "util/Compiler.h"
#include <FLAC/metadata.h>
class InputStream;
......@@ -67,12 +65,12 @@ public:
bool ReadOgg(InputStream &is) noexcept;
gcc_pure
[[gnu::pure]]
FLAC__Metadata_ChainStatus GetStatus() const noexcept {
return ::FLAC__metadata_chain_status(chain);
}
gcc_pure
[[gnu::pure]]
const char *GetStatusString() const noexcept {
return FLAC__Metadata_ChainStatusString[GetStatus()];
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment