Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pavlov <ipavlov@users.sourceforge.net>2007-08-27 04:00:00 +0400
committerKornel LesiƄski <kornel@geekhood.net>2016-05-28 02:15:54 +0300
commit051769bbc577aeede90558b6ab5c9be187940ca0 (patch)
treee6330cb80f2d4a526d8aa27812528e053b0cda90 /CPP/Common
parent33ccab7e728a996800e166d849fe1e92a17e1afe (diff)
4.53 beta
Diffstat (limited to 'CPP/Common')
-rwxr-xr-xCPP/Common/MyVector.h17
-rwxr-xr-xCPP/Common/Wildcard.cpp66
2 files changed, 44 insertions, 39 deletions
diff --git a/CPP/Common/MyVector.h b/CPP/Common/MyVector.h
index 1bb67a1d..ce370a53 100755
--- a/CPP/Common/MyVector.h
+++ b/CPP/Common/MyVector.h
@@ -96,6 +96,23 @@ public:
return -1;
}
+ int AddToUniqueSorted(const T& item)
+ {
+ int left = 0, right = Size();
+ while (left != right)
+ {
+ int mid = (left + right) / 2;
+ const T& midValue = (*this)[mid];
+ if (item == midValue)
+ return mid;
+ if (item < midValue)
+ right = mid;
+ else
+ left = mid + 1;
+ }
+ Insert(right, item);
+ return right;
+ }
static void SortRefDown(T* p, int k, int size, int (*compare)(const T*, const T*, void *), void *param)
{
diff --git a/CPP/Common/Wildcard.cpp b/CPP/Common/Wildcard.cpp
index 93dfd833..9feebbec 100755
--- a/CPP/Common/Wildcard.cpp
+++ b/CPP/Common/Wildcard.cpp
@@ -44,50 +44,38 @@ int CompareFileNames(const UString &s1, const UString &s2)
}
// -----------------------------------------
-// this function tests is name matches mask
-// ? - any wchar_t or empty
-// * - any characters or empty
+// this function compares name with mask
+// ? - any char
+// * - any char or empty
-static bool EnhancedMaskTest(const UString &mask, int maskPos,
- const UString &name, int namePos)
+static bool EnhancedMaskTest(const wchar_t *mask, const wchar_t *name)
{
- int maskLen = mask.Length() - maskPos;
- int nameLen = name.Length() - namePos;
- if (maskLen == 0)
- if (nameLen == 0)
- return true;
- else
- return false;
- wchar_t maskChar = mask[maskPos];
- if(maskChar == kAnyCharChar)
- {
- /*
- if (EnhancedMaskTest(mask, maskPos + 1, name, namePos))
- return true;
- */
- if (nameLen == 0)
- return false;
- return EnhancedMaskTest(mask, maskPos + 1, name, namePos + 1);
- }
- else if(maskChar == kAnyCharsChar)
- {
- if (EnhancedMaskTest(mask, maskPos + 1, name, namePos))
- return true;
- if (nameLen == 0)
- return false;
- return EnhancedMaskTest(mask, maskPos, name, namePos + 1);
- }
- else
+ for (;;)
{
- wchar_t c = name[namePos];
- if (maskChar != c)
+ wchar_t m = *mask;
+ wchar_t c = *name;
+ if (m == 0)
+ return (c == 0);
+ if (m == kAnyCharsChar)
{
- if (g_CaseSensitive)
- return false;
- else if (MyCharUpper(maskChar) != MyCharUpper(c))
+ if (EnhancedMaskTest(mask + 1, name))
+ return true;
+ if (c == 0)
return false;
}
- return EnhancedMaskTest(mask, maskPos + 1, name, namePos + 1);
+ else
+ {
+ if (m == kAnyCharChar)
+ {
+ if (c == 0)
+ return false;
+ }
+ else if (m != c)
+ if (g_CaseSensitive || MyCharUpper(m) != MyCharUpper(c))
+ return false;
+ mask++;
+ }
+ name++;
}
}
@@ -146,7 +134,7 @@ UString ExtractFileNameFromPath(const UString &path)
bool CompareWildCardWithName(const UString &mask, const UString &name)
{
- return EnhancedMaskTest(mask, 0, name, 0);
+ return EnhancedMaskTest(mask, name);
}
bool DoesNameContainWildCard(const UString &path)