mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
Added reflect method filters
This commit is contained in:
parent
f566daacea
commit
f9c0f2a311
9 changed files with 204 additions and 112 deletions
|
@ -60,3 +60,97 @@ uint64 stouln(const char* str, int len)
|
|||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
bool Beefy::BfCheckWildcard(const StringImpl& wildcard, const StringImpl& checkStr)
|
||||
{
|
||||
bool matched = true;
|
||||
const char* filterPtr = wildcard.c_str();
|
||||
const char* namePtr = checkStr.c_str();
|
||||
|
||||
char prevFilterC = 0;
|
||||
while (true)
|
||||
{
|
||||
char filterC;
|
||||
while (true)
|
||||
{
|
||||
filterC = *(filterPtr++);
|
||||
if (filterC != ' ')
|
||||
break;
|
||||
}
|
||||
|
||||
char nameC;
|
||||
while (true)
|
||||
{
|
||||
nameC = *(namePtr++);
|
||||
if (nameC != ' ')
|
||||
break;
|
||||
}
|
||||
|
||||
if ((filterC == 0) || (nameC == 0))
|
||||
{
|
||||
matched = (filterC == 0) && (nameC == 0);
|
||||
break;
|
||||
}
|
||||
|
||||
bool doWildcard = false;
|
||||
|
||||
if (nameC != filterC)
|
||||
{
|
||||
if (filterC == '*')
|
||||
doWildcard = true;
|
||||
else if (((filterC == ',') || (filterC == '>')) &&
|
||||
((prevFilterC == '<') || (prevFilterC == ',')))
|
||||
{
|
||||
doWildcard = true;
|
||||
filterPtr--;
|
||||
}
|
||||
|
||||
if (!doWildcard)
|
||||
{
|
||||
matched = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (doWildcard)
|
||||
{
|
||||
int openDepth = 0;
|
||||
|
||||
const char* startNamePtr = namePtr;
|
||||
|
||||
while (true)
|
||||
{
|
||||
nameC = *(namePtr++);
|
||||
if (nameC == 0)
|
||||
{
|
||||
namePtr--;
|
||||
if (openDepth != 0)
|
||||
matched = false;
|
||||
break;
|
||||
}
|
||||
if ((nameC == '>') && (openDepth == 0))
|
||||
{
|
||||
namePtr--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (nameC == '<')
|
||||
openDepth++;
|
||||
else if (nameC == '>')
|
||||
openDepth--;
|
||||
else if ((nameC == ',') && (openDepth == 0))
|
||||
{
|
||||
namePtr--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!matched)
|
||||
break;
|
||||
}
|
||||
|
||||
prevFilterC = filterC;
|
||||
}
|
||||
|
||||
return matched;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue