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