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