SongFilter: add ToExpression()
This commit is contained in:
parent
a2b24cb5a2
commit
efb2051b30
@ -73,6 +73,27 @@ SongFilter::Item::Item(unsigned _tag,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string
|
||||||
|
SongFilter::Item::ToExpression() const noexcept
|
||||||
|
{
|
||||||
|
switch (tag) {
|
||||||
|
case LOCATE_TAG_FILE_TYPE:
|
||||||
|
return "(" LOCATE_TAG_FILE_KEY " == \"" + value + "\")";
|
||||||
|
|
||||||
|
case LOCATE_TAG_BASE_TYPE:
|
||||||
|
return "(base \"" + value + "\")";
|
||||||
|
|
||||||
|
case LOCATE_TAG_MODIFIED_SINCE:
|
||||||
|
return "(modified-since \"" + value + "\")";
|
||||||
|
|
||||||
|
case LOCATE_TAG_ANY_TYPE:
|
||||||
|
return "(" LOCATE_TAG_ANY_KEY " == \"" + value + "\")";
|
||||||
|
|
||||||
|
default:
|
||||||
|
return std::string("(") + tag_item_names[tag] + " == \"" + value + "\")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
SongFilter::Item::StringMatchNN(const char *s) const noexcept
|
SongFilter::Item::StringMatchNN(const char *s) const noexcept
|
||||||
{
|
{
|
||||||
@ -177,6 +198,27 @@ SongFilter::~SongFilter()
|
|||||||
/* this destructor exists here just so it won't get inlined */
|
/* this destructor exists here just so it won't get inlined */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string
|
||||||
|
SongFilter::ToExpression() const noexcept
|
||||||
|
{
|
||||||
|
auto i = items.begin();
|
||||||
|
const auto end = items.end();
|
||||||
|
|
||||||
|
if (std::next(i) == end)
|
||||||
|
return i->ToExpression();
|
||||||
|
|
||||||
|
std::string e("(");
|
||||||
|
e += i->ToExpression();
|
||||||
|
|
||||||
|
for (++i; i != end; ++i) {
|
||||||
|
e += " AND ";
|
||||||
|
e += i->ToExpression();
|
||||||
|
}
|
||||||
|
|
||||||
|
e.push_back(')');
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
static std::chrono::system_clock::time_point
|
static std::chrono::system_clock::time_point
|
||||||
ParseTimeStamp(const char *s)
|
ParseTimeStamp(const char *s)
|
||||||
{
|
{
|
||||||
|
@ -70,6 +70,12 @@ public:
|
|||||||
Item(unsigned tag, std::string &&_value, bool fold_case=false);
|
Item(unsigned tag, std::string &&_value, bool fold_case=false);
|
||||||
Item(unsigned tag, std::chrono::system_clock::time_point time);
|
Item(unsigned tag, std::chrono::system_clock::time_point time);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert this object into an "expression". This is
|
||||||
|
* only useful for debugging.
|
||||||
|
*/
|
||||||
|
std::string ToExpression() const noexcept;
|
||||||
|
|
||||||
unsigned GetTag() const {
|
unsigned GetTag() const {
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
@ -129,6 +135,12 @@ public:
|
|||||||
|
|
||||||
~SongFilter();
|
~SongFilter();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert this object into an "expression". This is
|
||||||
|
* only useful for debugging.
|
||||||
|
*/
|
||||||
|
std::string ToExpression() const noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
gcc_nonnull(2,3)
|
gcc_nonnull(2,3)
|
||||||
void Parse(const char *tag, const char *value, bool fold_case=false);
|
void Parse(const char *tag, const char *value, bool fold_case=false);
|
||||||
|
Loading…
Reference in New Issue
Block a user