OSDN Git Service

An attempt to reduce build time
[winmerge-jp/winmerge-jp.git] / Src / PluginManager.h
1 #pragma once
2
3 #define POCO_NO_UNWINDOWS 1
4 #include <Poco/Mutex.h>
5 #include <memory>
6 #include <map>
7 // defines IPluginInfos
8 #include "DiffContext.h"
9 // defines PackingInfo and PrediffingInfo
10 #include "FileTransform.h"
11
12 /**
13  * @brief Cached plugin info for one particular file info
14  */
15 struct PluginFileInfo
16 {
17         PackingInfo m_infoUnpacker;
18         PrediffingInfo m_infoPrediffer;
19 };
20
21 typedef std::shared_ptr<PluginFileInfo> PluginFileInfoPtr;
22
23 /**
24  * @brief Cache of known plugin infos
25  */
26 class PluginManager : public IPluginInfos
27 {
28 public:
29         typedef std::map<String, PluginFileInfoPtr> PluginFileInfoMap;
30
31         ~PluginManager();
32         void Clear() { m_pluginSettings.clear(); };
33         void SetUnpackerSettingAll(bool automatic);
34         void SetPrediffSettingAll(bool automatic);
35         void SetPrediffer(const String& filteredFilenames, const String& predifferPipeline);
36         // Implement IPluginInfos
37         virtual void FetchPluginInfos(const String& filteredFilenames, 
38                                       PackingInfo ** infoUnpacker, 
39                                       PrediffingInfo ** infoPrediffer) override;
40 private:
41         // Data
42         PluginFileInfoMap m_pluginSettings;
43         Poco::FastMutex m_mutex;
44 };