nnc: Implement AbstractPluginInstance class (#266)
authorVitaliy Cherepanov/AI Tools Lab/Engineer/삼성전자 <v.cherepanov@samsung.com>
Fri, 1 Jun 2018 07:36:36 +0000 (10:36 +0300)
committerSergey Vostokov/AI Tools Lab/Staff Engineer/삼성전자 <s.vostokov@samsung.com>
Fri, 1 Jun 2018 07:36:36 +0000 (10:36 +0300)
nnc: implement AbstractPluginInstance class

Virtual plugin instance class.
Provides basic API for communication between plugin and nnc

Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
contrib/nnc/libs/plugin/include/PluginInstance.h [new file with mode: 0644]
contrib/nnc/libs/plugin/src/PluginInstance.cpp [new file with mode: 0644]

diff --git a/contrib/nnc/libs/plugin/include/PluginInstance.h b/contrib/nnc/libs/plugin/include/PluginInstance.h
new file mode 100644 (file)
index 0000000..558d59b
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef __PLUGIN_INSTANCE_H__
+#define __PLUGIN_INSTANCE_H__
+
+#include <string>
+#include <memory>
+#include "AbstractSession.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace plugin
+{
+
+//
+// This class and its methods are NOT thread safe
+//
+class AbstractPluginInstance
+{
+public:
+  static const std::string paramPluginVersion;
+  static const std::string paramPluginName;
+
+public:
+  AbstractPluginInstance();
+  virtual ~AbstractPluginInstance();
+
+  virtual void fillSessionBase(PluginType type, const std::string &ver,
+                               const std::string &pluginName);
+
+  virtual void fillSession() = 0;
+  virtual void setParam(const std::string &name) = 0;
+  virtual void setParam(const std::string &name, const std::string &value) = 0;
+  virtual void checkConfig() = 0;
+  virtual void *execute(void *data) = 0;
+
+  virtual void setSession(std::shared_ptr<config::AbstractSession> &session);
+  virtual std::shared_ptr<config::AbstractSession> getSession() const;
+
+private:
+  std::shared_ptr<config::AbstractSession> _session;
+};
+
+} // namespace plugin
+} // namespace contrib
+} // namespace nncc
+
+#endif // __PLUGIN_INSTANCE_H__
diff --git a/contrib/nnc/libs/plugin/src/PluginInstance.cpp b/contrib/nnc/libs/plugin/src/PluginInstance.cpp
new file mode 100644 (file)
index 0000000..f1688c3
--- /dev/null
@@ -0,0 +1,40 @@
+#include <memory>
+#include "PluginInstance.h"
+#include "PluginException.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace plugin
+{
+
+const std::string AbstractPluginInstance::paramPluginVersion = "version";
+const std::string AbstractPluginInstance::paramPluginName = "plugin name";
+
+void AbstractPluginInstance::fillSessionBase(PluginType type, const std::string &ver,
+                                             const std::string &pluginName)
+{
+  getSession()->setPluginType(type);
+  getSession()->addInfo(paramPluginVersion, ver);
+  getSession()->addInfo(paramPluginName, pluginName);
+}
+
+void AbstractPluginInstance::setSession(std::shared_ptr<config::AbstractSession> &session)
+{
+  _session = session;
+}
+
+std::shared_ptr<config::AbstractSession> AbstractPluginInstance::getSession() const
+{
+  if (_session == nullptr)
+    throw nncc::contrib::PluginException("session not set!");
+  return _session;
+}
+
+AbstractPluginInstance::AbstractPluginInstance() : _session(nullptr) {}
+AbstractPluginInstance::~AbstractPluginInstance() {}
+
+} // namespace plugin
+} // namespace contrib
+} // namespace nncc