tag/Handler: use std::string_view instead of StringView
This commit is contained in:
parent
ca9dd74fbf
commit
ec66ee3bfb
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue