song/{Tag,Uri}SongFilter: pass `StringFilter&&` to constructor

This commit is contained in:
Max Kellermann 2018-11-07 23:57:42 +01:00
parent 73b22d82aa
commit d5e0d49f86
3 changed files with 19 additions and 29 deletions

View File

@ -93,9 +93,8 @@ SongFilter::SongFilter(TagType tag, const char *value, bool fold_case)
{ {
/* for compatibility with MPD 0.20 and older, "fold_case" also /* for compatibility with MPD 0.20 and older, "fold_case" also
switches on "substring" */ switches on "substring" */
and_filter.AddItem(std::make_unique<TagSongFilter>(tag, value, and_filter.AddItem(std::make_unique<TagSongFilter>(tag,
fold_case, fold_case, StringFilter(value, fold_case, fold_case, false)));
false));
} }
SongFilter::~SongFilter() SongFilter::~SongFilter()
@ -293,19 +292,17 @@ SongFilter::ParseExpression(const char *&s, bool fold_case)
s = StripLeft(s + 1); s = StripLeft(s + 1);
StringFilter string_filter(std::move(value),
fold_case, false, negated);
if (type == LOCATE_TAG_ANY_TYPE) if (type == LOCATE_TAG_ANY_TYPE)
type = TAG_NUM_OF_ITEM_TYPES; type = TAG_NUM_OF_ITEM_TYPES;
if (type == LOCATE_TAG_FILE_TYPE) if (type == LOCATE_TAG_FILE_TYPE)
return std::make_unique<UriSongFilter>(std::move(value), return std::make_unique<UriSongFilter>(std::move(string_filter));
fold_case,
false,
negated);
return std::make_unique<TagSongFilter>(TagType(type), return std::make_unique<TagSongFilter>(TagType(type),
std::move(value), std::move(string_filter));
fold_case, false,
negated);
} }
} }
@ -332,10 +329,10 @@ SongFilter::Parse(const char *tag_string, const char *value, bool fold_case)
case LOCATE_TAG_FILE_TYPE: case LOCATE_TAG_FILE_TYPE:
/* for compatibility with MPD 0.20 and older, /* for compatibility with MPD 0.20 and older,
"fold_case" also switches on "substring" */ "fold_case" also switches on "substring" */
and_filter.AddItem(std::make_unique<UriSongFilter>(value, and_filter.AddItem(std::make_unique<UriSongFilter>(StringFilter(value,
fold_case, fold_case,
fold_case, fold_case,
false)); false)));
break; break;
default: default:
@ -345,10 +342,10 @@ SongFilter::Parse(const char *tag_string, const char *value, bool fold_case)
/* for compatibility with MPD 0.20 and older, /* for compatibility with MPD 0.20 and older,
"fold_case" also switches on "substring" */ "fold_case" also switches on "substring" */
and_filter.AddItem(std::make_unique<TagSongFilter>(TagType(tag), and_filter.AddItem(std::make_unique<TagSongFilter>(TagType(tag),
value, StringFilter(value,
fold_case, fold_case,
fold_case, fold_case,
false)); false)));
break; break;
} }
} }

View File

@ -37,12 +37,8 @@ class TagSongFilter final : public ISongFilter {
StringFilter filter; StringFilter filter;
public: public:
template<typename V> TagSongFilter(TagType _type, StringFilter &&_filter) noexcept
TagSongFilter(TagType _type, V &&_value, bool fold_case, bool substring, :type(_type), filter(std::move(_filter)) {}
bool negated)
:type(_type),
filter(std::forward<V>(_value), fold_case, substring,
negated) {}
TagType GetTagType() const { TagType GetTagType() const {
return type; return type;

View File

@ -27,11 +27,8 @@ class UriSongFilter final : public ISongFilter {
StringFilter filter; StringFilter filter;
public: public:
template<typename V> UriSongFilter(StringFilter &&_filter) noexcept
UriSongFilter(V &&_value, bool fold_case, bool substring, :filter(std::move(_filter)) {}
bool negated)
:filter(std::forward<V>(_value), fold_case, substring,
negated) {}
const auto &GetValue() const noexcept { const auto &GetValue() const noexcept {
return filter.GetValue(); return filter.GetValue();