Move member functions from PathScanner to functions in pbd/file_utils.h
[ardour.git] / libs / pbd / pbd / pathscanner.h
index 796648de0fe524826ea599bf9df2aa75fa0a12cb..e4d2f6aa0efcc2b4b796acdaa416bd15af2571a2 100644 (file)
 #include <regex.h>
 #endif
 
-class PathScanner
+#include "pbd/libpbd_visibility.h"
+
+#include "pbd/file_utils.h"
+
+class LIBPBD_API PathScanner
 
 {
   public:
-       std::vector<std::string *> *operator() (const std::string &dirpath,
-                                               bool (*filter)(const std::string &, void *arg),
-                                               void *arg, 
-                                               bool match_fullpath = true,
-                                               bool return_fullpath = true,
-                                               long limit = -1,
-                                               bool recurse = false) {
-               return run_scan (dirpath,
-                                (bool (PathScanner::*)(const std::string &)) 0, 
-                                filter, 
-                                arg,
-                                match_fullpath,
-                                return_fullpath, 
-                                limit, recurse);
+       std::vector<std::string> operator() (const std::string &dirpath,
+                                            bool (*filter)(const std::string &, void *arg),
+                                            void *arg,
+                                            bool match_fullpath = true,
+                                            bool return_fullpath = true,
+                                            long limit = -1,
+                                            bool recurse = false) {
+               std::vector<std::string> result;
+               PBD::find_files_matching_filter (result, dirpath,
+                                                filter, arg,
+                                                match_fullpath, return_fullpath,
+                                                limit, recurse);
+               return result;
        }
 
-       std::vector<std::string *> *operator() (const std::string &dirpath,
-                                               const std::string &regexp,
-                                               bool match_fullpath = true,
-                                               bool return_fullpath = true,
-                                               long limit = -1,
-                                               bool recurse = false);
-       
-       std::string *find_first (const std::string &dirpath,
-                                const std::string &regexp,
-                                bool match_fullpath = true,
-                                bool return_fullpath = true);
-       
-       std::string *find_first (const std::string &dirpath,
-                                bool (*filter)(const std::string &, void *),
-                                void *arg,
-                                bool match_fullpath = true,
-                                bool return_fullpath = true);
-       
-  private:
-       regex_t compiled_pattern;
-       
-       bool regexp_filter (const std::string &str) {
-               return regexec (&compiled_pattern, str.c_str(), 0, 0, 0) == 0;
-       }
-       
-       std::vector<std::string *> *run_scan (const std::string &dirpath,
-                                             bool (PathScanner::*mfilter) (const std::string &),
-                                             bool (*filter)(const std::string &, void *),
-                                             void *arg,
-                                             bool match_fullpath,
-                                             bool return_fullpath,
-                                             long limit,
-                                             bool recurse = false);
+       std::vector<std::string> operator() (const std::string &dirpath,
+                                            const std::string &regexp,
+                                            bool match_fullpath = true,
+                                            bool return_fullpath = true,
+                                            long limit = -1,
+                                            bool recurse = false)
+       {
+               std::vector<std::string> result;
 
-       std::vector<std::string *> *run_scan_internal (std::vector<std::string*>*, 
-                                                      const std::string &dirpath,
-                                                      bool (PathScanner::*mfilter) (const std::string &),
-                                                      bool (*filter)(const std::string &, void *),
-                                                      void *arg,
-                                                      bool match_fullpath,
-                                                      bool return_fullpath,
-                                                      long limit,
-                                                      bool recurse = false);
+               PBD::find_files_matching_regex (result,
+                                               dirpath,
+                                               regexp,
+                                               match_fullpath,
+                                               return_fullpath,
+                                               limit, recurse);
+
+               return result;
+       }
 };
 
 #endif // __libmisc_pathscanner_h__