Index: src/libchcore/TStringPattern.cpp =================================================================== diff -u -N -re8f31b0f922b402878356e130c866c4f3682a7f5 -rfcf6698a5e67445b1a68627fa94837b1ad97284e --- src/libchcore/TStringPattern.cpp (.../TStringPattern.cpp) (revision e8f31b0f922b402878356e130c866c4f3682a7f5) +++ src/libchcore/TStringPattern.cpp (.../TStringPattern.cpp) (revision fcf6698a5e67445b1a68627fa94837b1ad97284e) @@ -26,14 +26,32 @@ { } - TString TStringPattern::ToSerializedString() const + TStringPattern TStringPattern::CreateFromString(const TString& strPattern, EPatternType eDefaultPatternType) { + TStringPattern pattern; + pattern.FromString(strPattern, eDefaultPatternType); + return pattern; + } + + void TStringPattern::FromString(const TString& strPattern, EPatternType eDefaultPatternType) + { + m_ePatternType = eDefaultPatternType; + if (strPattern.StartsWith(L"WC;")) + { + m_strPattern = strPattern.Mid(3); + m_ePatternType = EPatternType::eType_Wildcard; + } + else + m_strPattern = strPattern; + } + + chcore::TString TStringPattern::ToString() const + { TString strPrefix; switch (m_ePatternType) { case EPatternType::eType_Wildcard: - strPrefix = L"WC;"; - break; + break; // wildcard won't have any prefix (it's implicit) default: throw TCoreException(eErr_UnhandledCase, L"Pattern type not supported", LOCATION); @@ -42,27 +60,9 @@ return TString(strPrefix + m_strPattern); } - void TStringPattern::FromSerializedString(const TString& strSerializedPattern) - { - if (strSerializedPattern.StartsWith(L"WC;")) - { - m_ePatternType = EPatternType::eType_Wildcard; - m_strPattern = strSerializedPattern.Mid(3); - } - else - throw TCoreException(eErr_UnhandledCase, L"Pattern type not supported", LOCATION); - } - - TStringPattern TStringPattern::CreateFromSerializedString(const TString& strSerializedPattern) - { - TStringPattern pattern; - pattern.FromSerializedString(strSerializedPattern); - return pattern; - } - bool TStringPattern::MatchMask(LPCTSTR lpszMask, LPCTSTR lpszString) const { - bool bMatch = 1; + bool bMatch = true; //iterate and delete '?' and '*' one by one while (*lpszMask != _T('\0') && bMatch && *lpszString != _T('\0'))