{
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 ¶m() 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
#include "model/operation/CustomNode.h"
-#include <cassert>
-
#include "model/OperationVisitor.h"
namespace neurun
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