Fix merge

This commit is contained in:
Lynix
2020-02-25 20:22:46 +01:00
parent cb66dddd45
commit 7bbba14ba0
10 changed files with 97 additions and 26 deletions

View File

@@ -118,6 +118,57 @@ namespace Nz
return WideConverter<sizeof(wchar_t)>::From(wstr.data(), wstr.size());
}
bool MatchPattern(const std::string_view& str, const std::string_view& pattern)
{
if (str.empty() || pattern.empty())
return false;
// Par Jack Handy - akkhandy@hotmail.com
// From : http://www.codeproject.com/Articles/1088/Wildcard-string-compare-globbing
const char* ptr = str.data();
const char* ptrEnd = str.data() + str.size();
const char* patternPtr = pattern.data();
const char* patternPtrEnd = pattern.data() + pattern.size();
while (ptr < ptrEnd && *patternPtr != '*')
{
if (patternPtr < patternPtrEnd && *patternPtr != *ptr && *patternPtr != '?')
return false;
patternPtr++;
ptr++;
}
const char* cp = nullptr;
const char* mp = nullptr;
while (*ptr)
{
if (*patternPtr == '*')
{
if (patternPtr + 1 >= patternPtrEnd)
return true;
mp = ++patternPtr;
cp = ptr + 1;
}
else if (*patternPtr == *ptr || *patternPtr == '?')
{
patternPtr++;
ptr++;
}
else
{
patternPtr = mp;
ptr = cp++;
}
}
while (patternPtr < patternPtrEnd && *patternPtr == '*')
patternPtr++;
return patternPtr >= patternPtrEnd;
}
bool StartsWith(const std::string_view& str, const std::string_view& s, CaseIndependent)
{
if (s.size() > str.size())