bool ParseSubCharsCommand(int numForms, const CCommandSubCharsSet *forms, const UString &commandString, CIntVector &indices) { indices.Clear(); int numUsedChars = 0; for(int i = 0; i < numForms; i++) { const CCommandSubCharsSet &set = forms[i]; int currentIndex = -1; int len = MyStringLen(set.Chars); for(int j = 0; j < len; j++) { wchar_t c = set.Chars[j]; int newIndex = commandString.Find(c); if (newIndex >= 0) { if (currentIndex >= 0) return false; if (commandString.Find(c, newIndex + 1) >= 0) return false; currentIndex = j; numUsedChars++; } } if(currentIndex == -1 && !set.EmptyAllowed) return false; indices.Add(currentIndex); } return (numUsedChars == commandString.Length()); }
void SortFileNames(const UStringVector &strings, CIntVector &indices) { indices.Clear(); int numItems = strings.Size(); indices.Reserve(numItems); for(int i = 0; i < numItems; i++) indices.Add(i); indices.Sort(CompareStrings, (void *)&strings); }
bool CCodecs::FindFormatForArchiveType(const UString &arcType, CIntVector &formatIndices) const { formatIndices.Clear(); for (int pos = 0; pos < arcType.Length();) { int pos2 = arcType.Find('.', pos); if (pos2 < 0) pos2 = arcType.Length(); const UString name = arcType.Mid(pos, pos2 - pos); int index = FindFormatForArchiveType(name); if (index < 0 && name != L"*") { formatIndices.Clear(); return false; } formatIndices.Add(index); pos = pos2 + 1; } return true; }