1 // SciTE - Scintilla based Text Editor 2 /** @file FileWorker.h 3 ** Definition of classes to perform background file tasks as threads. 4 **/ 5 // Copyright 2011 by Neil Hodgson <neilh@scintilla.org> 6 // The License.txt file describes the conditions under which this software may be distributed. 7 8 #ifndef FILEWORKER_H 9 #define FILEWORKER_H 10 11 /// Base size of file I/O operations. 12 constexpr size_t blockSize = 128 * 1024; 13 14 struct FileWorker : public Worker { 15 WorkerListener *pListener; 16 FilePath path; 17 size_t size; 18 int err; 19 FILE *fp; 20 GUI::ElapsedTime et; 21 int sleepTime; 22 double nextProgress; 23 24 FileWorker(WorkerListener *pListener_, const FilePath &path_, size_t size_, FILE *fp_); 25 ~FileWorker() override; 26 virtual double Duration() noexcept; CancelFileWorker27 void Cancel() override { 28 Worker::Cancel(); 29 } 30 virtual bool IsLoading() const noexcept = 0; 31 }; 32 33 class FileLoader : public FileWorker { 34 public: 35 ILoader *pLoader; 36 size_t readSoFar; 37 UniMode unicodeMode; 38 39 FileLoader(WorkerListener *pListener_, ILoader *pLoader_, const FilePath &path_, size_t size_, FILE *fp_); 40 ~FileLoader() override; 41 void Execute() override; 42 void Cancel() override; IsLoading()43 bool IsLoading() const noexcept override { 44 return true; 45 } 46 }; 47 48 class FileStorer : public FileWorker { 49 public: 50 const char *documentBytes; 51 size_t writtenSoFar; 52 UniMode unicodeMode; 53 bool visibleProgress; 54 55 FileStorer(WorkerListener *pListener_, const char *documentBytes_, const FilePath &path_, 56 size_t size_, FILE *fp_, UniMode unicodeMode_, bool visibleProgress_); 57 ~FileStorer() override; 58 void Execute() override; 59 void Cancel() override; IsLoading()60 bool IsLoading() const noexcept override { 61 return false; 62 } 63 }; 64 65 enum { 66 WORK_FILEREAD = 1, 67 WORK_FILEWRITTEN = 2, 68 WORK_FILEPROGRESS = 3, 69 WORK_PLATFORM = 100 70 }; 71 72 #endif 73