@@ -68,11 +68,22 @@ class ConfigCompiler;
6868class ConfigCompilerPlugin ;
6969struct ConfigResource ;
7070
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+
7183class ConfigComponentBase : public Config ::Component {
7284 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 ();
7687 RIME_API Config* Create (const string& file_name);
7788
7889 protected:
@@ -84,13 +95,17 @@ class ConfigComponentBase : public Config::Component {
8495 map<string, weak<ConfigData>> cache_;
8596};
8697
87- template <class Loader >
98+ template <class Loader , class ResourceProvider = ConfigResourceProvider >
8899 class ConfigComponent : public ConfigComponentBase {
89100 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)) {}
92105 ConfigComponent (function<void (Loader* loader)> setup)
93- : ConfigComponentBase(kConfigResourceType ) {
106+ : ConfigComponentBase(
107+ ResourceProvider::CreateResourceResolver (
108+ ResourceProvider::kDefaultResourceType )) {
94109 setup (&loader_);
95110 }
96111 private:
0 commit comments