// Common/Wildcard.h #ifndef __COMMON_WILDCARD_H #define __COMMON_WILDCARD_H #include "MyString.h" int CompareFileNames(const UString &s1, const UString &s2); void SplitPathToParts(const UString &path, UStringVector &pathParts); void SplitPathToParts(const UString &path, UString &dirPrefix, UString &name); UString ExtractDirPrefixFromPath(const UString &path); UString ExtractFileNameFromPath(const UString &path); bool DoesNameContainWildCard(const UString &path); bool CompareWildCardWithName(const UString &mask, const UString &name); namespace NWildcard { struct CItem { UStringVector PathParts; bool Recursive; bool ForFile; bool ForDir; bool CheckPath(const UStringVector &pathParts, bool isFile) const; }; class CCensorNode { CCensorNode *Parent; bool CheckPathCurrent(bool include, const UStringVector &pathParts, bool isFile) const; void AddItemSimple(bool include, CItem &item); bool CheckPath(UStringVector &pathParts, bool isFile, bool &include) const; public: CCensorNode(): Parent(0) { }; CCensorNode(const UString &name, CCensorNode *parent): Name(name), Parent(parent) { }; UString Name; CObjectVector SubNodes; CObjectVector IncludeItems; CObjectVector ExcludeItems; int FindSubNode(const UString &path) const; void AddItem(bool include, CItem &item); void AddItem(bool include, const UString &path, bool recursive, bool forFile, bool forDir); void AddItem2(bool include, const UString &path, bool recursive); bool NeedCheckSubDirs() const; bool AreThereIncludeItems() const; bool CheckPath(const UString &path, bool isFile, bool &include) const; bool CheckPath(const UString &path, bool isFile) const; bool CheckPathToRoot(bool include, UStringVector &pathParts, bool isFile) const; // bool CheckPathToRoot(const UString &path, bool isFile, bool include) const; void ExtendExclude(const CCensorNode &fromNodes); }; struct CPair { UString Prefix; CCensorNode Head; CPair(const UString &prefix): Prefix(prefix) { }; }; class CCensor { int FindPrefix(const UString &prefix) const; public: CObjectVector Pairs; bool AllAreRelative() const { return (Pairs.Size() == 1 && Pairs.Front().Prefix.IsEmpty()); } void AddItem(bool include, const UString &path, bool recursive); bool CheckPath(const UString &path, bool isFile) const; void ExtendExclude(); }; } #endif