OSDN Git Service

Avoid an assertion failure when loading settings from winmerge.ini
[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 SetPrediffSetting(const String& filteredFilenames, PLUGIN_MODE newsetting);
33         void SetPrediffSettingAll(PLUGIN_MODE newsetting);
34         void SetPrediffer(const String& filteredFilenames, const String& prediffer);
35         // Implement IPluginInfos
36         virtual void FetchPluginInfos(const String& filteredFilenames, 
37                                       PackingInfo ** infoUnpacker, 
38                                       PrediffingInfo ** infoPrediffer) override;
39 private:
40         // Data
41         PluginFileInfoMap m_pluginSettings;
42         Poco::FastMutex m_mutex;
43 };