{decoder,archive,playlist}/plugin: pass std::string_view to SupportsMimeType()

This commit is contained in:
Max Kellermann 2020-11-04 20:29:25 +01:00
parent 53396c0e50
commit 19dd1a25d7
13 changed files with 28 additions and 36 deletions

View File

@ -55,10 +55,8 @@ static bool archive_plugins_enabled[std::max(n_archive_plugins, std::size_t(1))]
if (archive_plugins_enabled[archive_plugin_iterator - archive_plugins])
const ArchivePlugin *
archive_plugin_from_suffix(const char *suffix) noexcept
archive_plugin_from_suffix(std::string_view suffix) noexcept
{
assert(suffix != nullptr);
archive_plugins_for_each_enabled(plugin)
if (plugin->suffixes != nullptr &&
StringArrayContainsCase(plugin->suffixes, suffix))

View File

@ -20,6 +20,8 @@
#ifndef MPD_ARCHIVE_LIST_HXX
#define MPD_ARCHIVE_LIST_HXX
#include <string_view>
struct ArchivePlugin;
extern const ArchivePlugin *const archive_plugins[];
@ -33,7 +35,7 @@ extern const ArchivePlugin *const archive_plugins[];
/* interface for using plugins */
const ArchivePlugin *
archive_plugin_from_suffix(const char *suffix) noexcept;
archive_plugin_from_suffix(std::string_view suffix) noexcept;
const ArchivePlugin *
archive_plugin_from_name(const char *name) noexcept;

View File

@ -124,7 +124,7 @@ decoder_check_plugin_mime(const DecoderPlugin &plugin,
const char *mime_type = is.GetMimeType();
return mime_type != nullptr &&
plugin.SupportsMimeType(GetMimeTypeBase(mime_type).c_str());
plugin.SupportsMimeType(GetMimeTypeBase(mime_type));
}
gcc_pure

View File

@ -175,7 +175,7 @@ decoder_plugin_deinit_all() noexcept
}
bool
decoder_plugins_supports_suffix(const char *suffix) noexcept
decoder_plugins_supports_suffix(std::string_view suffix) noexcept
{
return decoder_plugins_try([suffix](const DecoderPlugin &plugin){
return plugin.SupportsSuffix(suffix);

View File

@ -22,6 +22,8 @@
#include "util/Compiler.h"
#include <string_view>
struct ConfigData;
struct DecoderPlugin;
@ -98,6 +100,6 @@ decoder_plugins_for_each_enabled(F f)
*/
gcc_pure gcc_nonnull_all
bool
decoder_plugins_supports_suffix(const char *suffix) noexcept;
decoder_plugins_supports_suffix(std::string_view suffix) noexcept;
#endif

View File

@ -37,25 +37,15 @@ DecoderPlugin::SupportsUri(const char *uri) const noexcept
}
bool
DecoderPlugin::SupportsSuffix(const char *suffix) const noexcept
DecoderPlugin::SupportsSuffix(std::string_view suffix) const noexcept
{
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
assert(suffix != nullptr);
#endif
return suffixes != nullptr &&
StringArrayContainsCase(suffixes, suffix);
}
bool
DecoderPlugin::SupportsMimeType(const char *mime_type) const noexcept
DecoderPlugin::SupportsMimeType(std::string_view mime_type) const noexcept
{
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
assert(mime_type != nullptr);
#endif
return mime_types != nullptr &&
StringArrayContainsCase(mime_types, mime_type);
}

View File

@ -25,6 +25,7 @@
#include <forward_list> // IWYU pragma: export
#include <set>
#include <string>
#include <string_view>
struct ConfigBlock;
class InputStream;
@ -252,15 +253,15 @@ struct DecoderPlugin {
* Does the plugin announce the specified file name suffix?
*/
gcc_pure gcc_nonnull_all
bool SupportsSuffix(const char *suffix) const noexcept;
bool SupportsSuffix(std::string_view suffix) const noexcept;
/**
* Does the plugin announce the specified MIME type?
*/
gcc_pure gcc_nonnull_all
bool SupportsMimeType(const char *mime_type) const noexcept;
bool SupportsMimeType(std::string_view mime_type) const noexcept;
bool SupportsContainerSuffix(const char *suffix) const noexcept {
bool SupportsContainerSuffix(std::string_view suffix) const noexcept {
return container_scan != nullptr && SupportsSuffix(suffix);
}
};

View File

@ -172,7 +172,7 @@ decoder_check_plugin_mime(const DecoderPlugin &plugin,
const char *mime_type = is.GetMimeType();
return mime_type != nullptr &&
plugin.SupportsMimeType(GetMimeTypeBase(mime_type).c_str());
plugin.SupportsMimeType(GetMimeTypeBase(mime_type));
}
gcc_pure

View File

@ -29,7 +29,7 @@ PlaylistPlugin::SupportsScheme(StringView scheme) const noexcept
}
bool
PlaylistPlugin::SupportsSuffix(const char *suffix) const noexcept
PlaylistPlugin::SupportsSuffix(StringView suffix) const noexcept
{
return suffixes != nullptr &&
StringArrayContainsCase(suffixes, suffix);

View File

@ -126,7 +126,7 @@ struct PlaylistPlugin {
* Does the plugin announce the specified file name suffix?
*/
gcc_pure gcc_nonnull_all
bool SupportsSuffix(const char *suffix) const noexcept;
bool SupportsSuffix(StringView suffix) const noexcept;
/**
* Does the plugin announce the specified MIME type?

View File

@ -238,10 +238,8 @@ playlist_list_open_stream_mime(InputStreamPtr &&is, const char *full_mime)
}
std::unique_ptr<SongEnumerator>
playlist_list_open_stream_suffix(InputStreamPtr &&is, const char *suffix)
playlist_list_open_stream_suffix(InputStreamPtr &&is, std::string_view suffix)
{
assert(suffix != nullptr);
playlist_plugins_for_each_enabled(plugin) {
if (plugin->open_stream != nullptr &&
plugin->SupportsSuffix(suffix)) {
@ -289,10 +287,8 @@ playlist_list_open_stream(InputStreamPtr &&is, const char *uri)
}
const PlaylistPlugin *
FindPlaylistPluginBySuffix(const char *suffix) noexcept
FindPlaylistPluginBySuffix(std::string_view suffix) noexcept
{
assert(suffix != nullptr);
playlist_plugins_for_each_enabled(plugin) {
if (plugin->SupportsSuffix(suffix))
return plugin;

View File

@ -24,6 +24,8 @@
#include "thread/Mutex.hxx"
#include "util/Compiler.h"
#include <string_view>
struct ConfigData;
struct PlaylistPlugin;
class SongEnumerator;
@ -74,7 +76,7 @@ std::unique_ptr<SongEnumerator>
playlist_list_open_uri(const char *uri, Mutex &mutex);
std::unique_ptr<SongEnumerator>
playlist_list_open_stream_suffix(InputStreamPtr &&is, const char *suffix);
playlist_list_open_stream_suffix(InputStreamPtr &&is, std::string_view suffix);
/**
* Opens a playlist from an input stream.
@ -88,7 +90,7 @@ playlist_list_open_stream(InputStreamPtr &&is, const char *uri);
gcc_pure
const PlaylistPlugin *
FindPlaylistPluginBySuffix(const char *suffix) noexcept;
FindPlaylistPluginBySuffix(std::string_view suffix) noexcept;
/**
* Determines if there is a playlist plugin which can handle the
@ -96,7 +98,7 @@ FindPlaylistPluginBySuffix(const char *suffix) noexcept;
*/
gcc_pure
inline bool
playlist_suffix_supported(const char *suffix) noexcept
playlist_suffix_supported(std::string_view suffix) noexcept
{
return FindPlaylistPluginBySuffix(suffix) != nullptr;
}

View File

@ -23,6 +23,7 @@
#include "input/InputStream.hxx"
#include "input/LocalOpen.hxx"
#include "fs/Path.hxx"
#include "util/StringView.hxx"
#include "util/UriExtract.hxx"
#include "Log.hxx"
@ -39,12 +40,12 @@ try {
return nullptr;
const auto suffix_utf8 = Path::FromFS(suffix).ToUTF8Throw();
if (!playlist_suffix_supported(suffix_utf8.c_str()))
if (!playlist_suffix_supported(suffix_utf8))
return nullptr;
auto is = OpenLocalInputStream(path, mutex);
return playlist_list_open_stream_suffix(std::move(is),
suffix_utf8.c_str());
suffix_utf8);
} catch (...) {
LogError(std::current_exception());
return nullptr;