This commit is to fix common plugin interface.
There are some problems to return std::shared_ptr by library "C" interface
also AbstractPluginInstance and plugin *PluginInstance (like SamplePluginInstance) should be a
singleton and std::shared_ptr is unnecessary there.
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
const std::string &getPluginPath() const;
const std::string &getPluginName() const;
- std::shared_ptr<contrib::plugin::AbstractPluginInstance> getPluginInstance();
+ contrib::plugin::AbstractPluginInstance &getPluginInstance();
public:
static const std::string getInstanceFuncName;
friend std::ostream &operator<<(std::ostream &st, const PluginProxy &pl);
private:
- typedef std::shared_ptr<contrib::plugin::AbstractPluginInstance> (*get_instance_t)();
+ typedef contrib::plugin::AbstractPluginInstance *(*get_instance_t)();
- std::shared_ptr<contrib::plugin::AbstractPluginInstance> _pluginInstance;
+ contrib::plugin::AbstractPluginInstance *_pluginInstance;
std::shared_ptr<SharedLibrary> _lib;
get_instance_t _getInstance;
std::string _pluginName;
_activePlugin = nullptr;
for (auto &pl : _plugins) {
try {
- auto pluginInstance = pl->getPluginInstance();
- auto *session = dynamic_cast<config::PluginSession *>(pluginInstance->getSession().get());
+ auto &pluginInstance = pl->getPluginInstance();
+ auto *session = dynamic_cast<config::PluginSession *>(pluginInstance.getSession().get());
auto resParams = config::DataList::intersection(*conf, session->getSupportedParams());
for (auto param : resParams->getElements()) {
if (param.second.hasValue())
- pluginInstance->setParam(param.second.getName(), param.second.getValue());
+ pluginInstance.setParam(param.second.getName(), param.second.getValue());
else
- pluginInstance->setParam(param.second.getName());
+ pluginInstance.setParam(param.second.getName());
}
- pluginInstance->checkConfig();
+ pluginInstance.checkConfig();
_activePlugin = pl;
break;
}
if (_activePlugin == nullptr)
throw ConfigException("Module <" + pluginTypeToStr(_moduleType) +
"> has not been configured!");
- return _activePlugin->getPluginInstance()->execute(data);
+ return _activePlugin->getPluginInstance().execute(data);
}
contrib::plugin::PluginType AbstractModule::getModuleType() const { return _moduleType; }
for (const auto &pluginPath : plugins) {
try {
auto pl = PluginProxy::create(pluginPath);
- auto plInst = pl->getPluginInstance();
+ auto &plInst = pl->getPluginInstance();
std::shared_ptr<config::AbstractSession> session = std::make_shared<config::PluginSession>();
- plInst->setSession(session);
- plInst->fillSession();
+ plInst.setSession(session);
+ plInst.fillSession();
if (_showPluginInfo)
std::cout << "plugin <" + pluginPath + ">: {" << std::endl
for (auto &pl : _plugins) {
for (auto m : modules) {
auto session =
- dynamic_cast<config::PluginSession *>(pl->getPluginInstance()->getSession().get());
+ dynamic_cast<config::PluginSession *>(pl->getPluginInstance().getSession().get());
if (m->getModuleType() == session->getPluginType()) {
m->registerPlugin(pl);
break;
const std::string &PluginProxy::getPluginName() const { return _pluginName; }
-std::shared_ptr<contrib::plugin::AbstractPluginInstance> PluginProxy::getPluginInstance() {
+contrib::plugin::AbstractPluginInstance &PluginProxy::getPluginInstance() {
if (_pluginInstance == nullptr)
throw PluginException(std::string("bad plugin instance <") + getPluginPath() + ">");
- return _pluginInstance;
+ return *_pluginInstance;
}
} // namespace plugins