41 PluginError(
const std::string& path,
const std::string& what) :
Error(what), plugin_path_(path) {}
42 PluginError(
const std::string& path,
const char* what) :
Error(what), plugin_path_(path) {}
44 template <
typename... Args>
45 PluginError(
const std::string& path,
const char* format,
const Args&... args)
46 :
Error(format, args...), plugin_path_(path) {}
55 const std::string&
plugin_path()
const {
return plugin_path_; }
58 std::string plugin_path_;
114 explicit Plugin(
const std::string& plugin_path,
const std::string&
name =
"");
128 std::string
path()
const {
return path_; }
133 std::string
name()
const {
return name_; }
178 template <
typename F>
179 std::unique_ptr<F>
make()
const {
181 throw PluginError(
path(),
"cannot make factory from incompatible plugin");
184 auto f = std::unique_ptr<F>(
dynamic_cast<F*
>(createf_()));
189 friend void to_json(Json& j,
const Plugin& p) {
203 PluginManifest manifest_;
205 std::function<ModelFactory*()> createf_;
211 template <
typename F>
214 BASE_CLOE_FACTORY(F)::PLUGIN_TYPE,
215 BASE_CLOE_FACTORY(F)::PLUGIN_API_VERSION,
219 auto fn = []() {
return new F(); };
220 return std::make_shared<Plugin>(manifest, fn);
Definition: model.hpp:403
Definition: plugin.hpp:39
const std::string & plugin_path() const
Definition: plugin.hpp:55
Definition: plugin.hpp:61
bool is_compatible() const
Definition: plugin.cpp:174
Schema schema() const
Definition: plugin.cpp:167
std::string path() const
Definition: plugin.hpp:128
Plugin(const std::string &plugin_path, const std::string &name="")
Definition: plugin.cpp:122
std::string required_type_version() const
Definition: plugin.cpp:178
std::string type() const
Definition: plugin.hpp:138
std::string type_version() const
Definition: plugin.hpp:143
std::string name() const
Definition: plugin.hpp:133
bool is_type_known() const
Definition: plugin.cpp:172
std::unique_ptr< F > make() const
Definition: plugin.hpp:179
Definition: schema.hpp:173
std::shared_ptr< Plugin > make_plugin()
Definition: plugin.hpp:212
Definition: plugin.hpp:149
const char * plugin_type
Definition: plugin.hpp:153
const char * plugin_type_version
Definition: plugin.hpp:158