tag/Handler: use std::string_view instead of StringView

This commit is contained in:
Max Kellermann 2022-06-29 16:44:23 +02:00
parent ca9dd74fbf
commit ec66ee3bfb
7 changed files with 38 additions and 30 deletions

View File

@ -106,7 +106,7 @@ handle_listfiles_local(Response &r, Path path_fs)
gcc_pure gcc_pure
static bool static bool
IsValidName(const StringView s) noexcept IsValidName(const std::string_view s) noexcept
{ {
if (s.empty() || !IsAlphaASCII(s.front())) if (s.empty() || !IsAlphaASCII(s.front()))
return false; return false;
@ -118,7 +118,7 @@ IsValidName(const StringView s) noexcept
gcc_pure gcc_pure
static bool static bool
IsValidValue(const StringView s) noexcept IsValidValue(const std::string_view s) noexcept
{ {
return std::none_of(s.begin(), s.end(), [](const auto &ch) { return (unsigned char)ch < 0x20; }); return std::none_of(s.begin(), s.end(), [](const auto &ch) { return (unsigned char)ch < 0x20; });
} }
@ -130,7 +130,7 @@ public:
explicit PrintCommentHandler(Response &_response) noexcept explicit PrintCommentHandler(Response &_response) noexcept
:NullTagHandler(WANT_PAIR), response(_response) {} :NullTagHandler(WANT_PAIR), response(_response) {}
void OnPair(StringView key, StringView value) noexcept override { void OnPair(std::string_view key, std::string_view value) noexcept override {
if (IsValidName(key) && IsValidValue(value)) if (IsValidName(key) && IsValidValue(value))
response.Fmt(FMT_STRING("{}: {}\n"), key, value); response.Fmt(FMT_STRING("{}: {}\n"), key, value);
} }

View File

@ -148,7 +148,7 @@ public:
explicit PrintTagHandler(Response &_response) noexcept explicit PrintTagHandler(Response &_response) noexcept
:NullTagHandler(WANT_TAG), response(_response) {} :NullTagHandler(WANT_TAG), response(_response) {}
void OnTag(TagType type, StringView value) noexcept override { void OnTag(TagType type, std::string_view value) noexcept override {
if (response.GetClient().tag_mask.Test(type)) if (response.GetClient().tag_mask.Test(type))
tag_print(response, type, value); tag_print(response, type, value);
} }

View File

@ -81,11 +81,11 @@ adplug_file_decode(DecoderClient &client, Path path_fs)
} }
static void static void
adplug_scan_tag(TagType type, const std::string &value, adplug_scan_tag(TagType type, const std::string_view value,
TagHandler &handler) noexcept TagHandler &handler) noexcept
{ {
if (!value.empty()) if (!value.empty())
handler.OnTag(type, {value.data(), value.size()}); handler.OnTag(type, value);
} }
static bool static bool

View File

@ -39,6 +39,8 @@
#include <string.h> #include <string.h>
using std::string_view_literals::operator""sv;
class EmbeddedCuePlaylist final : public SongEnumerator { class EmbeddedCuePlaylist final : public SongEnumerator {
public: public:
/** /**
@ -69,14 +71,15 @@ public:
ExtractCuesheetTagHandler() noexcept:NullTagHandler(WANT_PAIR) {} ExtractCuesheetTagHandler() noexcept:NullTagHandler(WANT_PAIR) {}
void OnPair(StringView key, StringView value) noexcept override; void OnPair(std::string_view key, std::string_view value) noexcept override;
}; };
void void
ExtractCuesheetTagHandler::OnPair(StringView name, StringView value) noexcept ExtractCuesheetTagHandler::OnPair(std::string_view name, std::string_view value) noexcept
{ {
if (cuesheet.empty() && name.EqualsIgnoreCase("cuesheet")) if (cuesheet.empty() &&
cuesheet = {value.data, value.size}; StringView{name}.EqualsIgnoreCase("cuesheet"sv))
cuesheet = value;
} }
static std::unique_ptr<SongEnumerator> static std::unique_ptr<SongEnumerator>

View File

@ -25,13 +25,15 @@
#include <algorithm> #include <algorithm>
using std::string_view_literals::operator""sv;
void void
NullTagHandler::OnTag(TagType, StringView) noexcept NullTagHandler::OnTag(TagType, std::string_view) noexcept
{ {
} }
void void
NullTagHandler::OnPair(StringView, StringView) noexcept NullTagHandler::OnPair(std::string_view, std::string_view) noexcept
{ {
} }
@ -54,18 +56,18 @@ AddTagHandler::OnDuration(SongTime duration) noexcept
/** /**
* Skip leading zeroes and a non-decimal suffix. * Skip leading zeroes and a non-decimal suffix.
*/ */
static StringView static std::string_view
NormalizeDecimal(StringView s) NormalizeDecimal(std::string_view s)
{ {
auto start = std::find_if(s.begin(), s.end(), auto start = std::find_if(s.begin(), s.end(),
[](char ch){ return ch != '0'; }); [](char ch){ return ch != '0'; });
auto end = std::find_if(start, s.end(), auto end = std::find_if(start, s.end(),
[](char ch){ return !IsDigitASCII(ch); }); [](char ch){ return !IsDigitASCII(ch); });
return {start, end}; return StringView{start, end};
} }
void void
AddTagHandler::OnTag(TagType type, StringView value) noexcept AddTagHandler::OnTag(TagType type, std::string_view value) noexcept
{ {
if (type == TAG_TRACK || type == TAG_DISC) { if (type == TAG_TRACK || type == TAG_DISC) {
/* filter out this extra data and leading zeroes */ /* filter out this extra data and leading zeroes */
@ -77,9 +79,9 @@ AddTagHandler::OnTag(TagType type, StringView value) noexcept
} }
void void
FullTagHandler::OnPair(StringView name, StringView) noexcept FullTagHandler::OnPair(std::string_view name, std::string_view) noexcept
{ {
if (name.EqualsIgnoreCase("cuesheet")) if (StringView{name}.EqualsIgnoreCase("cuesheet"sv))
tag.SetHasPlaylist(true); tag.SetHasPlaylist(true);
} }

View File

@ -26,8 +26,8 @@
#include <cstddef> #include <cstddef>
#include <span> #include <span>
#include <string_view>
struct StringView;
struct AudioFormat; struct AudioFormat;
class TagBuilder; class TagBuilder;
@ -83,13 +83,14 @@ public:
* @param the value of the tag; the pointer will become * @param the value of the tag; the pointer will become
* invalid after returning * invalid after returning
*/ */
virtual void OnTag(TagType type, StringView value) noexcept = 0; virtual void OnTag(TagType type, std::string_view value) noexcept = 0;
/** /**
* A name-value pair has been read. It is the codec specific * A name-value pair has been read. It is the codec specific
* representation of tags. * representation of tags.
*/ */
virtual void OnPair(StringView key, StringView value) noexcept = 0; virtual void OnPair(std::string_view key,
std::string_view value) noexcept = 0;
/** /**
* Declare the audio format of a song. * Declare the audio format of a song.
@ -127,8 +128,9 @@ public:
:TagHandler(_want_mask) {} :TagHandler(_want_mask) {}
void OnDuration([[maybe_unused]] SongTime duration) noexcept override {} void OnDuration([[maybe_unused]] SongTime duration) noexcept override {}
void OnTag(TagType type, StringView value) noexcept override; void OnTag(TagType type, std::string_view value) noexcept override;
void OnPair(StringView key, StringView value) noexcept override; void OnPair(std::string_view key,
std::string_view value) noexcept override;
void OnAudioFormat(AudioFormat af) noexcept override; void OnAudioFormat(AudioFormat af) noexcept override;
void OnPicture(const char *mime_type, void OnPicture(const char *mime_type,
std::span<const std::byte> buffer) noexcept override; std::span<const std::byte> buffer) noexcept override;
@ -151,7 +153,7 @@ public:
:AddTagHandler(0, _builder) {} :AddTagHandler(0, _builder) {}
void OnDuration(SongTime duration) noexcept override; void OnDuration(SongTime duration) noexcept override;
void OnTag(TagType type, StringView value) noexcept override; void OnTag(TagType type, std::string_view value) noexcept override;
}; };
/** /**
@ -175,7 +177,8 @@ public:
AudioFormat *_audio_format=nullptr) noexcept AudioFormat *_audio_format=nullptr) noexcept
:FullTagHandler(0, _builder, _audio_format) {} :FullTagHandler(0, _builder, _audio_format) {}
void OnPair(StringView key, StringView value) noexcept override; void OnPair(std::string_view key,
std::string_view value) noexcept override;
void OnAudioFormat(AudioFormat af) noexcept override; void OnAudioFormat(AudioFormat af) noexcept override;
}; };

View File

@ -60,16 +60,16 @@ public:
printf("duration=%f\n", duration.ToDoubleS()); printf("duration=%f\n", duration.ToDoubleS());
} }
void OnTag(TagType type, StringView value) noexcept override { void OnTag(TagType type, std::string_view value) noexcept override {
printf("[%s]=%.*s\n", tag_item_names[type], printf("[%s]=%.*s\n", tag_item_names[type],
int(value.size), value.data); int(value.size()), value.data());
empty = false; empty = false;
} }
void OnPair(StringView key, StringView value) noexcept override { void OnPair(std::string_view key, std::string_view value) noexcept override {
printf("\"%.*s\"=%.*s\n", printf("\"%.*s\"=%.*s\n",
int(key.size), key.data, int(key.size()), key.data(),
int(value.size), value.data); int(value.size()), value.data());
} }
void OnAudioFormat(AudioFormat af) noexcept override { void OnAudioFormat(AudioFormat af) noexcept override {