#ifndef FILE_OPENER_HH #define FILE_OPENER_HH #include "unique_fd.hh" #include #include #include class TaskRunner; class FileOpener { public: virtual ~FileOpener() = default; // All callbacks are posted to runner. open() and cancel() must be called // on same thread as runner "runs" on. static std::unique_ptr create(std::shared_ptr runner, size_t threads = 1); // Never returns 0. virtual uint32_t open(std::filesystem::path path, std::function callback) = 0; virtual void cancel(uint32_t id) = 0; protected: FileOpener() = default; FileOpener(FileOpener const&) = delete; FileOpener& operator=(FileOpener const&) = delete; }; #endif // FILE_OPENER_HH