@@ -68,11 +68,22 @@ class ConfigCompiler;
68
68
class ConfigCompilerPlugin ;
69
69
struct ConfigResource ;
70
70
71
+ struct ConfigResourceProvider {
72
+ RIME_API static const ResourceType kDefaultResourceType ;
73
+ RIME_API static ResourceResolver*
74
+ CreateResourceResolver (const ResourceType& resource_type);
75
+ };
76
+
77
+ struct UserConfigResourceProvider {
78
+ RIME_API static const ResourceType kDefaultResourceType ;
79
+ RIME_API static ResourceResolver*
80
+ CreateResourceResolver (const ResourceType& resource_type);
81
+ };
82
+
71
83
class ConfigComponentBase : public Config ::Component {
72
84
public:
73
- RIME_API static const ResourceType kConfigResourceType ;
74
- RIME_API ConfigComponentBase (const ResourceType& resource_type);
75
- RIME_API ~ConfigComponentBase ();
85
+ RIME_API ConfigComponentBase (ResourceResolver* resource_resolver);
86
+ RIME_API virtual ~ConfigComponentBase ();
76
87
RIME_API Config* Create (const string& file_name);
77
88
78
89
protected:
@@ -84,13 +95,17 @@ class ConfigComponentBase : public Config::Component {
84
95
map<string, weak<ConfigData>> cache_;
85
96
};
86
97
87
- template <class Loader >
98
+ template <class Loader , class ResourceProvider = ConfigResourceProvider >
88
99
class ConfigComponent : public ConfigComponentBase {
89
100
public:
90
- ConfigComponent (const ResourceType& resource_type = kConfigResourceType )
91
- : ConfigComponentBase(resource_type) {}
101
+ ConfigComponent (const ResourceType& resource_type =
102
+ ResourceProvider::kDefaultResourceType )
103
+ : ConfigComponentBase(
104
+ ResourceProvider::CreateResourceResolver (resource_type)) {}
92
105
ConfigComponent (function<void (Loader* loader)> setup)
93
- : ConfigComponentBase(kConfigResourceType ) {
106
+ : ConfigComponentBase(
107
+ ResourceProvider::CreateResourceResolver (
108
+ ResourceProvider::kDefaultResourceType )) {
94
109
setup (&loader_);
95
110
}
96
111
private:
0 commit comments