[custom op] Update node for new custom op design (#6286)
authorVladimir Plazun/AI Tools Lab /SRR/Engineer/삼성전자 <v.plazun@samsung.com>
Mon, 19 Aug 2019 07:57:29 +0000 (10:57 +0300)
committer오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Mon, 19 Aug 2019 07:57:29 +0000 (16:57 +0900)
Now `_id` and `userdata` are stored directly in `CustomNode` as now custom ops are defined using pure C api
- Use string id
- return id by const reference

Signed-off-by: Vladimir Plazun <v.plazun@samsung.com>
runtimes/neurun/core/include/model/operation/CustomNode.h
runtimes/neurun/core/src/model/operation/CustomNode.cc

index f562583..23e20b9 100644 (file)
@@ -29,49 +29,26 @@ class CustomNode : public model::Operation
 {
 public:
   CustomNode(OperandConstraint input_constr, const OperandIndexSequence &inputs,
-             const OperandIndexSequence &outputs);
-  void accept(OperationVisitor &v) const override;
-
-  struct Param
-  {
-    void *data;
+             const OperandIndexSequence &outputs, std::string id, void *userdata);
 
-    template <typename T> T *as() { return reinterpret_cast<T *>(data); };
-  };
+  void accept(OperationVisitor &v) const override;
 
 public:
-  virtual size_t id() const = 0;
-  virtual const Param &param() const = 0;
+  /**
+   * @return unique operation identifier
+   */
+  const std::string &id() const;
+
+  /**
+   * @return user-provided data
+   */
+  void *userdata() const;
+
+private:
+  std::string _id;
+  void *_userdata;
 };
 
-template <typename Derived> class CustomNodeIdMixin : public CustomNode
-{
-public:
-  CustomNodeIdMixin(const OperandConstraint &inputConstr, const OperandIndexSequence &inputs,
-                    const OperandIndexSequence &outputs);
-  size_t id() const final { return _id; }
-  std::string getName() const override;
-
-protected:
-  friend class CustomOperationRegistry;
-  static size_t _id;
-};
-
-template <typename Derived> size_t CustomNodeIdMixin<Derived>::_id;
-
-template <typename Derived> std::string CustomNodeIdMixin<Derived>::getName() const
-{
-  return "custom node of type " + std::to_string(id());
-}
-
-template <typename Derived>
-CustomNodeIdMixin<Derived>::CustomNodeIdMixin(const OperandConstraint &inputConstr,
-                                              const OperandIndexSequence &inputs,
-                                              const OperandIndexSequence &outputs)
-    : CustomNode(inputConstr, inputs, outputs)
-{
-}
-
 } // namespace operation
 } // namespace model
 } // namespace neurun
index 0118358..f57b706 100644 (file)
@@ -16,8 +16,6 @@
 
 #include "model/operation/CustomNode.h"
 
-#include <cassert>
-
 #include "model/OperationVisitor.h"
 
 namespace neurun
@@ -30,11 +28,15 @@ namespace operation
 void CustomNode::accept(OperationVisitor &v) const { v.visit(*this); }
 
 CustomNode::CustomNode(OperandConstraint input_constr, const OperandIndexSequence &inputs,
-                       const OperandIndexSequence &outputs)
-    : model::Operation{input_constr, inputs, outputs}
+                       const OperandIndexSequence &outputs, std::string id, void *userdata)
+    : model::Operation{input_constr, inputs, outputs}, _id(std::move(id)), _userdata(userdata)
 {
 }
 
+const std::string &CustomNode::id() const { return _id; }
+
+void *CustomNode::userdata() const { return _userdata; }
+
 } // namespace operation
 } // namespace model
 } // namespace neurun