Glob.hxx.in 4.02 KB
Newer Older
1
2
3
/*============================================================================
  KWSys - Kitware System Library
  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
Andy Cedilnik's avatar
Andy Cedilnik committed
4

5
6
  Distributed under the OSI-approved BSD License (the "License");
  see accompanying file Copyright.txt for details.
Andy Cedilnik's avatar
Andy Cedilnik committed
7

8
9
10
11
  This software is distributed WITHOUT ANY WARRANTY; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the License for more information.
============================================================================*/
Andy Cedilnik's avatar
Andy Cedilnik committed
12
13
14
#ifndef @KWSYS_NAMESPACE@_Glob_hxx
#define @KWSYS_NAMESPACE@_Glob_hxx

15
16
17
#include <@KWSYS_NAMESPACE@/Configure.h>
#include <@KWSYS_NAMESPACE@/Configure.hxx>

Andy Cedilnik's avatar
Andy Cedilnik committed
18
19
20
#include <@KWSYS_NAMESPACE@/stl/string>
#include <@KWSYS_NAMESPACE@/stl/vector>

21
22
23
24
/* Define this macro temporarily to keep the code readable.  */
#if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS
# define kwsys_stl @KWSYS_NAMESPACE@_stl
#endif
Andy Cedilnik's avatar
Andy Cedilnik committed
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

namespace @KWSYS_NAMESPACE@
{

class GlobInternals;

/** \class Glob
 * \brief Portable globbing searches.
 *
 * Globbing expressions are much simpler than regular
 * expressions. This class will search for files using
 * globbing expressions.
 *
 * Finds all files that match a given globbing expression.
 */
class @KWSYS_NAMESPACE@_EXPORT Glob
{
public:
  Glob();
  ~Glob();

  //! Find all files that match the pattern.
47
  bool FindFiles(const kwsys_stl::string& inexpr);
Andy Cedilnik's avatar
Andy Cedilnik committed
48
49

  //! Return the list of files that matched.
50
  kwsys_stl::vector<kwsys_stl::string>& GetFiles();
Andy Cedilnik's avatar
Andy Cedilnik committed
51
52
53
54

  //! Set recurse to true to match subdirectories.
  void RecurseOn() { this->SetRecurse(true); }
  void RecurseOff() { this->SetRecurse(false); }
55
56
57
  void SetRecurse(bool i) { this->Recurse = i; }
  bool GetRecurse() { return this->Recurse; }

58
59
60
61
62
63
64
  //! Set recurse through symlinks to true if recursion should traverse the
  // linked-to directories
  void RecurseThroughSymlinksOn() { this->SetRecurseThroughSymlinks(true); }
  void RecurseThroughSymlinksOff() { this->SetRecurseThroughSymlinks(false); }
  void SetRecurseThroughSymlinks(bool i) { this->RecurseThroughSymlinks = i; }
  bool GetRecurseThroughSymlinks() { return this->RecurseThroughSymlinks; }

65
66
67
  //! Get the number of symlinks followed through recursion
  unsigned int GetFollowedSymlinkCount() { return this->FollowedSymlinkCount; }

68
69
70
  //! Set relative to true to only show relative path to files.
  void SetRelative(const char* dir);
  const char* GetRelative();
Andy Cedilnik's avatar
Andy Cedilnik committed
71

72
73
74
75
76
77
78
79
  /** Convert the given globbing pattern to a regular expression.
      There is no way to quote meta-characters.  The
      require_whole_string argument specifies whether the regex is
      automatically surrounded by "^" and "$" to match the whole
      string.  This is on by default because patterns always match
      whole strings, but may be disabled to support concatenating
      expressions more easily (regex1|regex2|etc).  */
  static kwsys_stl::string PatternToRegex(const kwsys_stl::string& pattern,
80
81
                                          bool require_whole_string = true,
                                          bool preserve_case = false);
82

Andy Cedilnik's avatar
Andy Cedilnik committed
83
84
protected:
  //! Process directory
85
  void ProcessDirectory(kwsys_stl::string::size_type start,
86
    const kwsys_stl::string& dir, bool dir_only);
Andy Cedilnik's avatar
Andy Cedilnik committed
87
88
89

  //! Process last directory, but only when recurse flags is on. That is
  // effectively like saying: /path/to/file/**/file
90
91
  void RecurseDirectory(kwsys_stl::string::size_type start,
    const kwsys_stl::string& dir, bool dir_only);
Andy Cedilnik's avatar
Andy Cedilnik committed
92
93
94
95

  //! Add regular expression
  void AddExpression(const char* expr);

96
97
98
99
100
101
  //! Add a file to the list
  void AddFile(kwsys_stl::vector<kwsys_stl::string>& files, const char* file);

  GlobInternals* Internals;
  bool Recurse;
  kwsys_stl::string Relative;
102
  bool RecurseThroughSymlinks;
103
  unsigned int FollowedSymlinkCount;
104
105
106
107

private:
  Glob(const Glob&);  // Not implemented.
  void operator=(const Glob&);  // Not implemented.
Andy Cedilnik's avatar
Andy Cedilnik committed
108
109
110
111
};

} // namespace @KWSYS_NAMESPACE@

112
113
114
115
116
/* Undefine temporary macro.  */
#if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE@_NAME_IS_KWSYS
# undef kwsys_stl
#endif

Andy Cedilnik's avatar
Andy Cedilnik committed
117
#endif