/*========================================================================= Program: KWSys - Kitware System Library Module: $RCSfile$ Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef @KWSYS_NAMESPACE@_Glob_hxx #define @KWSYS_NAMESPACE@_Glob_hxx #include <@KWSYS_NAMESPACE@/Configure.h> #include <@KWSYS_NAMESPACE@/Configure.hxx> #include <@KWSYS_NAMESPACE@/stl/string> #include <@KWSYS_NAMESPACE@/stl/vector> /* 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 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. bool FindFiles(const kwsys_stl::string& inexpr); //! Return the list of files that matched. kwsys_stl::vector& GetFiles(); //! Set recurse to true to match subdirectories. void RecurseOn() { this->SetRecurse(true); } void RecurseOff() { this->SetRecurse(false); } void SetRecurse(bool i) { m_Recurse = i; } bool GetRecurse() { return m_Recurse; } protected: //! Process directory void ProcessDirectory(kwsys_stl::string::size_type start, const kwsys_stl::string& dir, bool dir_only); //! Process last directory, but only when recurse flags is on. That is // effectively like saying: /path/to/file/**/file void RecurseDirectory(kwsys_stl::string::size_type start, const kwsys_stl::string& dir, bool dir_only); //! Escape all non-alphanumeric characters in pattern. void Escape(int ch, char* buffer); //! // Translate a shell PATTERN to a regular expression. // There is no way to quote meta-characters. kwsys_stl::string ConvertExpression(const kwsys_stl::string& expr); //! Add regular expression void AddExpression(const char* expr); GlobInternals* m_Internals; bool m_Recurse; }; } // namespace @KWSYS_NAMESPACE@ #endif