--- /dev/null
+#include "Concat.h"
+
+namespace neurun
+{
+namespace graph
+{
+namespace operation
+{
+namespace Concat
+{
+
+operand::IndexSet Node::inputs() const
+{
+ operand::IndexSet set;
+ for (auto index : _op->param().ifm_indexes)
+ {
+ set.append({index});
+ }
+ return set;
+}
+
+} // namespace Concat
+} // namespace operation
+} // namespace graph
+} // namespace neurun
--- /dev/null
+#ifndef __NEURUN_GRAPH_OPERATION_CONCAT_H__
+#define __NEURUN_GRAPH_OPERATION_CONCAT_H__
+
+#include <memory>
+
+#include "graph/operation/Node.h"
+#include "internal/op/Concat.h"
+
+namespace neurun
+{
+namespace graph
+{
+namespace operation
+{
+namespace Concat
+{
+
+class Node : public graph::operation::Node
+{
+public:
+ Node(std::unique_ptr<::internal::tflite::op::Concat::Node> &&op) : _op{std::move(op)} {}
+
+public:
+ virtual operand::IndexSet inputs() const override;
+ virtual operand::IndexSet outputs() const override { return {_op->param().ofm_index}; }
+ virtual const ::internal::tflite::op::Node *op() const override { return _op.get(); }
+
+private:
+ std::unique_ptr<::internal::tflite::op::Concat::Node> _op;
+};
+
+} // namespace Concat
+} // namespace operation
+} // namespace graph
+} // namespace neurun
+
+#endif // __NEURUN_GRAPH_OPERATION_CONCAT_H__