#ifndef FILES_FINDER_HH #define FILES_FINDER_HH #include #include class Logger; class TaskRunner; class FilesFinder { public: class Delegate { public: virtual ~Delegate() = default; // Called on any thread, default implementation // returns true for files not hidden. // Depth is counted from root, files in root have depth zero. virtual bool include_file(std::string_view name, uint16_t depth) const; // Called on any thread, default implementation // returns true for dirs not hidden. // Depth is counted from root, files in root have depth zero. virtual bool include_dir(std::string_view name, uint16_t depth) const; // Called for each file found. Called on runner. virtual void file(std::filesystem::path path) = 0; // Called after all files have been found. Called on runner. // Default implementation does nothing. virtual void done(); protected: Delegate() = default; }; virtual ~FilesFinder() = default; static std::unique_ptr create(std::shared_ptr logger, std::shared_ptr runner, std::filesystem::path root, Delegate* delegate, size_t threads = 1); protected: FilesFinder() = default; FilesFinder(FilesFinder const&) = delete; FilesFinder& operator=(FilesFinder const&) = delete; }; #endif // FILES_HH