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