tag/VorbisComment: use struct StringView
This commit is contained in:
parent
8e0d810968
commit
9ae9b2c18f
@ -68,11 +68,12 @@ flac_parse_mixramp(const FLAC__StreamMetadata_VorbisComment &vc)
|
|||||||
* Checks if the specified name matches the entry's name, and if yes,
|
* Checks if the specified name matches the entry's name, and if yes,
|
||||||
* returns the comment value;
|
* returns the comment value;
|
||||||
*/
|
*/
|
||||||
static const char *
|
static StringView
|
||||||
flac_comment_value(const FLAC__StreamMetadata_VorbisComment_Entry *entry,
|
GetFlacCommentValue(const FLAC__StreamMetadata_VorbisComment_Entry *entry,
|
||||||
const char *name) noexcept
|
StringView name) noexcept
|
||||||
{
|
{
|
||||||
return vorbis_comment_value((const char *)entry->entry, name);
|
return GetVorbisCommentValue({(const char *)entry->entry, entry->length},
|
||||||
|
name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,11 +82,11 @@ flac_comment_value(const FLAC__StreamMetadata_VorbisComment_Entry *entry,
|
|||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
flac_copy_comment(const FLAC__StreamMetadata_VorbisComment_Entry *entry,
|
flac_copy_comment(const FLAC__StreamMetadata_VorbisComment_Entry *entry,
|
||||||
const char *name, TagType tag_type,
|
StringView name, TagType tag_type,
|
||||||
TagHandler &handler) noexcept
|
TagHandler &handler) noexcept
|
||||||
{
|
{
|
||||||
const char *value = flac_comment_value(entry, name);
|
const auto value = GetFlacCommentValue(entry, name);
|
||||||
if (value != nullptr) {
|
if (!value.IsNull()) {
|
||||||
handler.OnTag(tag_type, value);
|
handler.OnTag(tag_type, value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -50,14 +50,12 @@ vorbis_comments_to_replay_gain(ReplayGainInfo &rgi, char **comments) noexcept
|
|||||||
* the comment value into the tag.
|
* the comment value into the tag.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
vorbis_copy_comment(const char *comment,
|
vorbis_copy_comment(StringView comment,
|
||||||
const char *name, TagType tag_type,
|
StringView name, TagType tag_type,
|
||||||
TagHandler &handler) noexcept
|
TagHandler &handler) noexcept
|
||||||
{
|
{
|
||||||
const char *value;
|
const auto value = GetVorbisCommentValue(comment, name);
|
||||||
|
if (!value.IsNull()) {
|
||||||
value = vorbis_comment_value(comment, name);
|
|
||||||
if (value != nullptr) {
|
|
||||||
handler.OnTag(tag_type, value);
|
handler.OnTag(tag_type, value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -72,8 +72,8 @@ ParseMixRampVorbis(MixRampInfo &info, const char *entry)
|
|||||||
const char *entry;
|
const char *entry;
|
||||||
|
|
||||||
gcc_pure
|
gcc_pure
|
||||||
StringView operator[](const char *n) const noexcept {
|
StringView operator[](StringView n) const noexcept {
|
||||||
return vorbis_comment_value(entry, n);
|
return GetVorbisCommentValue(entry, n);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -70,14 +70,14 @@ ParseReplayGainTag(ReplayGainInfo &info, const char *name, const char *value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ParseReplayGainVorbis(ReplayGainInfo &info, const char *entry)
|
ParseReplayGainVorbis(ReplayGainInfo &info, StringView entry)
|
||||||
{
|
{
|
||||||
struct VorbisCommentEntry {
|
struct VorbisCommentEntry {
|
||||||
const char *entry;
|
StringView entry;
|
||||||
|
|
||||||
gcc_pure
|
gcc_pure
|
||||||
const char *operator[](const char *n) const noexcept {
|
const char *operator[](StringView n) const noexcept {
|
||||||
return vorbis_comment_value(entry, n);
|
return GetVorbisCommentValue(entry, n).data;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -20,12 +20,13 @@
|
|||||||
#ifndef MPD_TAG_REPLAY_GAIN_HXX
|
#ifndef MPD_TAG_REPLAY_GAIN_HXX
|
||||||
#define MPD_TAG_REPLAY_GAIN_HXX
|
#define MPD_TAG_REPLAY_GAIN_HXX
|
||||||
|
|
||||||
|
struct StringView;
|
||||||
struct ReplayGainInfo;
|
struct ReplayGainInfo;
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ParseReplayGainTag(ReplayGainInfo &info, const char *name, const char *value);
|
ParseReplayGainTag(ReplayGainInfo &info, const char *name, const char *value);
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ParseReplayGainVorbis(ReplayGainInfo &info, const char *entry);
|
ParseReplayGainVorbis(ReplayGainInfo &info, StringView entry);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,23 +18,21 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "VorbisComment.hxx"
|
#include "VorbisComment.hxx"
|
||||||
#include "util/ASCII.hxx"
|
#include "util/StringView.hxx"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
const char *
|
StringView
|
||||||
vorbis_comment_value(const char *entry, const char *name) noexcept
|
GetVorbisCommentValue(StringView entry, StringView name) noexcept
|
||||||
{
|
{
|
||||||
assert(entry != nullptr);
|
assert(!name.empty());
|
||||||
assert(name != nullptr);
|
|
||||||
assert(*name != 0);
|
|
||||||
|
|
||||||
const size_t length = strlen(name);
|
if (entry.StartsWithIgnoreCase(name) &&
|
||||||
|
entry.size > name.size &&
|
||||||
if (StringEqualsCaseASCII(entry, name, length) &&
|
entry[name.size] == '=') {
|
||||||
entry[length] == '=')
|
entry.skip_front(name.size + 1);
|
||||||
return entry + length + 1;
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,14 @@
|
|||||||
|
|
||||||
#include "util/Compiler.h"
|
#include "util/Compiler.h"
|
||||||
|
|
||||||
|
struct StringView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the specified name matches the entry's name, and if yes,
|
* Checks if the specified name matches the entry's name, and if yes,
|
||||||
* returns the comment value.
|
* returns the comment value.
|
||||||
*/
|
*/
|
||||||
gcc_pure
|
gcc_pure
|
||||||
const char *
|
StringView
|
||||||
vorbis_comment_value(const char *entry, const char *name) noexcept;
|
GetVorbisCommentValue(StringView entry, StringView name) noexcept;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user