librime 1.2
Rime Input Method Engine, the core library
config_component.h
Go to the documentation of this file.
1//
2// Copyright RIME Developers
3// Distributed under the BSD License
4//
5// 2011-4-6 Zou xu <zouivex@gmail.com>
6//
7#ifndef RIME_CONFIG_COMPONENT_H_
8#define RIME_CONFIG_COMPONENT_H_
9
10#include <iostream>
11#include <type_traits>
12#include <rime/common.h>
13#include <rime/component.h>
15#include <rime/resource.h>
16
17namespace rime {
18
19class ConfigData;
20
21class Config : public Class<Config, const string&>, public ConfigItemRef {
22 public:
23 // CAVEAT: Config instances created without argument will NOT
24 // be managed by ConfigComponent
26 RIME_DLL virtual ~Config();
27 // instances of Config with identical config id share a copy of config data
28 // in the ConfigComponent
29 explicit Config(an<ConfigData> data);
30
31 // returns whether actually saved to file.
32 bool Save();
33 bool LoadFromStream(std::istream& stream);
34 bool SaveToStream(std::ostream& stream);
35 RIME_DLL bool LoadFromFile(const path& file_path);
36 RIME_DLL bool SaveToFile(const path& file_path);
37
38 // access a tree node of a particular type with "path/to/node"
39 RIME_DLL bool IsNull(const string& path);
40 bool IsValue(const string& path);
41 RIME_DLL bool IsList(const string& path);
42 RIME_DLL bool IsMap(const string& path);
43 RIME_DLL bool GetBool(const string& path, bool* value);
44 RIME_DLL bool GetInt(const string& path, int* value);
45 RIME_DLL bool GetDouble(const string& path, double* value);
46 RIME_DLL bool GetString(const string& path, string* value);
47 RIME_DLL size_t GetListSize(const string& path);
48
49 an<ConfigItem> GetItem(const string& path);
50 an<ConfigValue> GetValue(const string& path);
51 RIME_DLL an<ConfigList> GetList(const string& path);
52 RIME_DLL an<ConfigMap> GetMap(const string& path);
53
54 // setters
55 bool SetBool(const string& path, bool value);
56 RIME_DLL bool SetInt(const string& path, int value);
57 bool SetDouble(const string& path, double value);
58 RIME_DLL bool SetString(const string& path, const char* value);
59 bool SetString(const string& path, const string& value);
60 // setter for adding or replacing items in the tree
61 RIME_DLL bool SetItem(const string& path, an<ConfigItem> item);
62 using ConfigItemRef::operator=;
63
64 protected:
65 an<ConfigItem> GetItem() const;
66 void SetItem(an<ConfigItem> item);
67
69};
70
71class ConfigCompiler;
73struct ConfigResource;
74
78 const ResourceType& resource_type);
79};
80
84 const ResourceType& resource_type);
85};
86
90 const ResourceType& resource_type);
91};
92
93class ConfigComponentBase : public Config::Component {
94 public:
97 RIME_DLL Config* Create(const string& file_name);
98
99 protected:
100 virtual an<ConfigData> LoadConfig(const string& config_id) = 0;
102
103 private:
104 an<ConfigData> GetConfigData(const string& file_name);
105 map<string, weak<ConfigData>> cache_;
106};
107
108template <class Loader, class ResourceProvider = ConfigResourceProvider>
110 public:
111 ConfigComponent(const ResourceType& resource_type =
112 ResourceProvider::kDefaultResourceType)
114 ResourceProvider::CreateResourceResolver(resource_type)) {}
115 ConfigComponent(function<void(Loader* loader)> setup)
116 : ConfigComponentBase(ResourceProvider::CreateResourceResolver(
117 ResourceProvider::kDefaultResourceType)) {
118 setup(&loader_);
119 }
120
121 private:
122 an<ConfigData> LoadConfig(const string& config_id) override {
123 return loader_.LoadConfig(resource_resolver_.get(), config_id);
124 }
125 Loader loader_;
126};
127
129 public:
131 const string& config_id);
132 void set_auto_save(bool auto_save) { auto_save_ = auto_save; }
133
134 private:
135 bool auto_save_ = false;
136};
137
139 public:
141 RIME_DLL virtual ~ConfigBuilder();
143 const string& config_id);
146
147 private:
148 vector<the<ConfigCompilerPlugin>> plugins_;
149};
150
151} // namespace rime
152
153#endif // RIME_CONFIG_COMPONENT_H_
#define RIME_DLL
Definition rime_api.h:33
Definition algebra.cc:12
std::shared_ptr< T > an
Definition common.h:60
std::unique_ptr< T > the
Definition common.h:58
Definition common.h:84
Definition component.h:21
Definition config_compiler.h:15
Definition config_compiler.h:41
Definition config_component.h:21
RIME_DLL bool GetString(const string &path, string *value)
Definition config_component.cc:84
RIME_DLL bool GetBool(const string &path, bool *value)
Definition config_component.cc:66
RIME_DLL an< ConfigList > GetList(const string &path)
Definition config_component.cc:106
RIME_DLL bool IsMap(const string &path)
Definition config_component.cc:61
RIME_DLL bool SetItem(const string &path, an< ConfigItem > item)
Definition config_component.cc:136
RIME_DLL bool SetString(const string &path, const char *value)
Definition config_component.cc:128
bool Save()
Definition config_component.cc:26
bool IsValue(const string &path)
Definition config_component.cc:51
RIME_DLL bool SaveToFile(const path &file_path)
Definition config_component.cc:42
RIME_DLL bool LoadFromFile(const path &file_path)
Definition config_component.cc:38
an< ConfigData > data_
Definition config_component.h:68
bool SaveToStream(std::ostream &stream)
Definition config_component.cc:34
RIME_DLL bool IsList(const string &path)
Definition config_component.cc:56
bool SetBool(const string &path, bool value)
Definition config_component.cc:116
RIME_DLL size_t GetListSize(const string &path)
Definition config_component.cc:90
RIME_DLL bool SetInt(const string &path, int value)
Definition config_component.cc:120
RIME_DLL an< ConfigMap > GetMap(const string &path)
Definition config_component.cc:111
RIME_DLL Config()
Definition config_component.cc:18
bool LoadFromStream(std::istream &stream)
Definition config_component.cc:30
an< ConfigItem > GetItem(const string &path)
Definition config_component.cc:96
RIME_DLL bool GetDouble(const string &path, double *value)
Definition config_component.cc:78
bool SetDouble(const string &path, double value)
Definition config_component.cc:124
an< ConfigValue > GetValue(const string &path)
Definition config_component.cc:101
RIME_DLL bool GetInt(const string &path, int *value)
Definition config_component.cc:72
RIME_DLL bool IsNull(const string &path)
Definition config_component.cc:46
Definition config_component.h:75
static RIME_DLL ResourceResolver * CreateResourceResolver(const ResourceType &resource_type)
Definition config_component.cc:152
static RIME_DLL const ResourceType kDefaultResourceType
Definition config_component.h:76
Definition config_component.h:81
static RIME_DLL const ResourceType kDefaultResourceType
Definition config_component.h:82
static RIME_DLL ResourceResolver * CreateResourceResolver(const ResourceType &resource_type)
Definition config_component.cc:160
Definition config_component.h:87
static RIME_DLL const ResourceType kDefaultResourceType
Definition config_component.h:88
static RIME_DLL ResourceResolver * CreateResourceResolver(const ResourceType &resource_type)
Definition config_component.cc:168
virtual an< ConfigData > LoadConfig(const string &config_id)=0
the< ResourceResolver > resource_resolver_
Definition config_component.h:101
RIME_DLL Config * Create(const string &file_name)
Definition config_component.cc:178
RIME_DLL ConfigComponentBase(ResourceResolver *resource_resolver)
Definition config_component.cc:173
ConfigComponent(function< void(Loader *loader)> setup)
Definition config_component.h:115
ConfigComponent(const ResourceType &resource_type=ResourceProvider::kDefaultResourceType)
Definition config_component.h:111
Definition config_component.h:128
RIME_DLL an< ConfigData > LoadConfig(ResourceResolver *resource_resolver, const string &config_id)
Definition config_component.cc:195
void set_auto_save(bool auto_save)
Definition config_component.h:132
void InstallPlugin(ConfigCompilerPlugin *plugin)
Definition config_component.cc:207
RIME_DLL an< ConfigData > LoadConfig(ResourceResolver *resource_resolver, const string &config_id)
Definition config_component.cc:244
RIME_DLL ConfigBuilder()
Definition config_component.cc:203
bool ApplyPlugins(ConfigCompiler *compiler, an< ConfigResource > resource)
Definition config_data.h:17
ConfigItemRef(ConfigData *data)
Definition config_types.h:128
Definition plugins.h:15
Definition resource.h:16
Definition resource.h:22