You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
914 B
C++
53 lines
914 B
C++
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
// Copyright The Music Player Daemon Project
|
|
|
|
#include "StringFilter.hxx"
|
|
#include "util/StringAPI.hxx"
|
|
|
|
#include <cassert>
|
|
|
|
bool
|
|
StringFilter::MatchWithoutNegation(const char *s) const noexcept
|
|
{
|
|
assert(s != nullptr);
|
|
|
|
#ifdef HAVE_PCRE
|
|
if (regex)
|
|
return regex->Match(s);
|
|
#endif
|
|
|
|
if (fold_case) {
|
|
switch (position) {
|
|
case Position::FULL:
|
|
break;
|
|
|
|
case Position::ANYWHERE:
|
|
return fold_case.IsIn(s);
|
|
|
|
case Position::PREFIX:
|
|
return fold_case.StartsWith(s);
|
|
}
|
|
|
|
return fold_case == s;
|
|
} else {
|
|
switch (position) {
|
|
case Position::FULL:
|
|
break;
|
|
|
|
case Position::ANYWHERE:
|
|
return StringFind(s, value.c_str()) != nullptr;
|
|
|
|
case Position::PREFIX:
|
|
return StringIsEqual(s, value.c_str(), value.length());
|
|
}
|
|
|
|
return value == s;
|
|
}
|
|
}
|
|
|
|
bool
|
|
StringFilter::Match(const char *s) const noexcept
|
|
{
|
|
return MatchWithoutNegation(s) != negated;
|
|
}
|