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

View File

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

View File

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