Wildcard.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Common/Wildcard.h
  2. #ifndef __COMMON_WILDCARD_H
  3. #define __COMMON_WILDCARD_H
  4. #include "MyString.h"
  5. int CompareFileNames(const UString &s1, const UString &s2);
  6. void SplitPathToParts(const UString &path, UStringVector &pathParts);
  7. void SplitPathToParts(const UString &path, UString &dirPrefix, UString &name);
  8. UString ExtractDirPrefixFromPath(const UString &path);
  9. UString ExtractFileNameFromPath(const UString &path);
  10. bool DoesNameContainWildCard(const UString &path);
  11. bool CompareWildCardWithName(const UString &mask, const UString &name);
  12. namespace NWildcard {
  13. struct CItem
  14. {
  15. UStringVector PathParts;
  16. bool Recursive;
  17. bool ForFile;
  18. bool ForDir;
  19. bool CheckPath(const UStringVector &pathParts, bool isFile) const;
  20. };
  21. class CCensorNode
  22. {
  23. CCensorNode *Parent;
  24. bool CheckPathCurrent(bool include, const UStringVector &pathParts, bool isFile) const;
  25. void AddItemSimple(bool include, CItem &item);
  26. bool CheckPath(UStringVector &pathParts, bool isFile, bool &include) const;
  27. public:
  28. CCensorNode(): Parent(0) { };
  29. CCensorNode(const UString &name, CCensorNode *parent): Name(name), Parent(parent) { };
  30. UString Name;
  31. CObjectVector<CCensorNode> SubNodes;
  32. CObjectVector<CItem> IncludeItems;
  33. CObjectVector<CItem> ExcludeItems;
  34. int FindSubNode(const UString &path) const;
  35. void AddItem(bool include, CItem &item);
  36. void AddItem(bool include, const UString &path, bool recursive, bool forFile, bool forDir);
  37. void AddItem2(bool include, const UString &path, bool recursive);
  38. bool NeedCheckSubDirs() const;
  39. bool AreThereIncludeItems() const;
  40. bool CheckPath(const UString &path, bool isFile, bool &include) const;
  41. bool CheckPath(const UString &path, bool isFile) const;
  42. bool CheckPathToRoot(bool include, UStringVector &pathParts, bool isFile) const;
  43. // bool CheckPathToRoot(const UString &path, bool isFile, bool include) const;
  44. void ExtendExclude(const CCensorNode &fromNodes);
  45. };
  46. struct CPair
  47. {
  48. UString Prefix;
  49. CCensorNode Head;
  50. CPair(const UString &prefix): Prefix(prefix) { };
  51. };
  52. class CCensor
  53. {
  54. int FindPrefix(const UString &prefix) const;
  55. public:
  56. CObjectVector<CPair> Pairs;
  57. bool AllAreRelative() const
  58. { return (Pairs.Size() == 1 && Pairs.Front().Prefix.IsEmpty()); }
  59. void AddItem(bool include, const UString &path, bool recursive);
  60. bool CheckPath(const UString &path, bool isFile) const;
  61. void ExtendExclude();
  62. };
  63. }
  64. #endif